... break
... try:
... position = int(value)
... print(short_list[position])
... except IndexError as err:
... print('Bad index:', position)
... except Exception as other:
... print('Something else broke:', other)
...
Position [q to quit]? 1
2
Position [q to quit]? 0
1
Position [q to quit]? 2
3
Position [q to quit]? 3
Bad index: 3
Position [q to quit]? 2
3
Position [q to quit]? two
Something else broke: invalid literal for int() with base 10: 'two'
Position [q to quit]? q
Ввод позиции 3, как и ожидалось, генерирует исключение IndexError. Ввод сло-
ва two не понравился функции int(), которую мы обработали во втором, всеохва-
тывающем обработчике.
Создание собственных исключений
В предыдущем разделе мы обсудили обработку исключений, но все исключения
(такие как IndexError) заранее определены в Python или его стандартных библио-
теках. Вы можете использовать любые из этих исключений в собственных интере-
сах. Можете также определить собственные типы исключений, чтобы обрабатывать
особые ситуации, которые могут возникнуть в ваших программах.
Для этого потребуется определить новый тип объекта с помощью класса — этим мы не будем
заниматься вплоть до главы 6. Поэтому, если вы не знакомы с классами, может понадо-
биться вернуться к этому разделу позже.
140
Глава 4. Корочка Python: структуры кода
Любое исключение является классом, в частности потомком класса Exception.
Создадим исключение, которое называется UppercaseException, и вызовем его, когда
встретим слово, записанное в верхнем регистре.
>>> class UppercaseException(Exception):
... pass
...
>>> words = ['eeenie', 'meenie', 'miny', 'MO']
>>> for word in words:
... if word.isupper():
... raise UppercaseException(word)
...
Traceback (most recent call last):
File "<stdin>", line 3, in <module>