Найти - Пользователи
Полная версия: Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?
Начало » Python для новичков » Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?
1
rudm
код для иллюстрации
# -*- coding: cp1251 -*-
#Проверяем возможности создания и обработки исключений
#при выходе за границы списка

#задаем любой массив с вложенными кортежами где
#key one - название ключа, 2 - значение ключа, 'g' - дополнительный флаг ключа
some_list = [('key one', 2, 'g'), ('key two', 3, 'n'),
('key four', 4, 'g'), ('key three', 4, 'n')]

#Создаем функцию получающую в цикле значения из массива
def some_function():
#Создаем счетчик равный длинне массива
counter = len(some_list)
#Создаем цикл c условием выполнения до тех пор пока счетчик больше нуля
while counter > 0:
#Обрабатываем исключение TupleIndexOutOfRange (Выход за границы кортежа)

#Печатаем значения ключей
print some_list[counter - 1][2]
#После каждого прохода цикла уменьшаем счетчик на единицу
counter = counter - 1
#Запускаем функцию
some_function()
Код рабочий, но проблема в том, что вложенные в массив кортежи иногда состоят из названия ключа, его значения, но без дополнительного флага. То есть возможна такая ситуация, что массив с вложенными кортежами будет выглядеть так:
some_list = [('key one', 2, 'g'), ('key two', 3, 'n'),
('key four', 4, 'g'), ('key three', 4)]
И таким образом при попытке прохода в цикле по вторым элементам кортежей вложенных в массив, получаем ошибку:
IndexError: tuple index out of range 
Подскажите пожалуйста, как обработать такое исключение?
То есть, понятно что надо создать конструкцию вида
if tuple index out of range:
pass
Но каков синтаксис обращения к исключению?
sank
Вариант 1:
try:
    print tuple[2]
except IndexError:
    pass

Вариант 2:
if len(tuple)>2:
    pass

Оно?
reclosedev
 t = (1, 2)
 try:
     print t[2]
 except IndexError:
     print "out of range"
http://docs.python.org/2/tutorial/errors.html (ru)
Еще можно длину кортежа проверять.
rudm
большое спасибо!
sanodin
def some_function():
#Создаем счетчик равный длинне массива
    counter = len(some_list)
#Создаем цикл c условием выполнения до тех пор пока счетчик больше нуля
    while counter > 0:
#Обрабатываем исключение TupleIndexOutOfRange (Выход за границы кортежа)
        try: 
#Печатаем значения ключей
             print some_list[counter - 1][2]
        except IndexError:
             print some_list[counter - 1][0],"> out of range"
#После каждого прохода цикла уменьшаем счетчик на единицу
        counter = counter - 1
sp3
Здесь while - не по питонски.
Можно извратится с параметрами по умолчанию
def foo(key, val, flag= None):
    print key, val, flag
    
some_list = [('key one', 2, 'g'), ('key two', 3, 'n'),
             ('key four', 4, 'g'), ('key three', 4)]
for x in some_list:
    foo(*x)
4kpt
sp3
Сам хотел предложить использовать значения функции по умолчанию.
Опередил… :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB