Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 103

... if value == 'q':

... 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>