Module (84%)
Section (36%)

Два except после одного try

Посмотрите на код:

try: value = int(input('Enter a natural number: ')) print('The reciprocal of', value, 'is', 1/value) except ValueError: print('I do not know what to do with', value) except ZeroDivisionError: print('Division by zero is not allowed in our Universe')

Как видите, мы только что добавили вторую ветвь except. Это не единственное различие - обратите внимание, что в обеих ветвях указаны имена исключений. В этом варианте каждое из ожидаемых исключений имеет свой собственный способ обработки ошибки, но следует подчеркнуть, что только одна из всех ветвей может перехватить элемент управления - если одна из ветвей выполняется, все остальные ветви остаются бездействующими. Кроме того, количество ветвей except не ограничено - Вы можете указать их столько, сколько Вам нужно, но не забывайте, что ни одно из исключений не может быть указано больше, чем один раз.

Но это еще не последнее слово Python об исключениях. Будьте на связи.



Исключение по умолчанию и как его использовать

Код снова изменился - видите разницу?

try: value = int(input('Enter a natural number: ')) print('The reciprocal of', value, 'is', 1/value) except ValueError: print('I do not know what to do with', value) except ZeroDivisionError: print('Division by zero is not allowed in our Universe') except: print('Something strange has happened – sorry!')

Мы добавили третью ветвь except, но на этот раз для нее не указано имя исключения - мы можем сказать, что оно анонимное или (что ближе в соответствии с его реальной ролью) это значение по умолчанию. Вы можете ожидать, что когда возникает исключение и нет ветви except, выделенной для этого исключения, оно будет обрабатываться ветвью по умолчанию.

Примечание:

Ветвь except по умолчанию должна быть последней ветвью except! Всегда!