Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Python для новичков
  • » Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)? [RSS Feed]

#1 Дек. 7, 2012 13:24:56

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?

код для иллюстрации

# -*- 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
Но каков синтаксис обращения к исключению?



Офлайн

#2 Дек. 7, 2012 14:50:01

sank
Зарегистрирован: 2012-10-05
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?

Вариант 1:

try:
    print tuple[2]
except IndexError:
    pass

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

Оно?

Офлайн

#3 Дек. 7, 2012 14:50:37

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?

 t = (1, 2)
 try:
     print t[2]
 except IndexError:
     print "out of range"
http://docs.python.org/2/tutorial/errors.html (ru)
Еще можно длину кортежа проверять.

Офлайн

#4 Дек. 8, 2012 07:20:46

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?

большое спасибо!



Офлайн

#5 Дек. 8, 2012 20:44:35

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?

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

Офлайн

#6 Дек. 9, 2012 07:04:40

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?

Здесь 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)



Офлайн

#7 Дек. 9, 2012 15:37:18

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?

sp3
Сам хотел предложить использовать значения функции по умолчанию.
Опередил… :)



Отредактировано 4kpt (Дек. 9, 2012 15:38:46)

Офлайн

  • Начало
  • » Python для новичков
  • » Python 2.6.3 Обработка исключений. Как создать исключение при выходе за границы кортежа (tuple index out of range)?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version