Module (84%)
Section (38%)

Исключения: продолжение

Посмотрите на код в редакторе. Что в нем происходит?

Первая подходящая ветвь - содержащая ZeroDivisionError. Это означает, что консоль покажет:

Zero division! THE END.

output

Изменится ли что-нибудь, если мы поменяем местами две ветви except?

try: y = 1 / 0 except ArithmeticError: print("Arithmetic problem!") except ZeroDivisionError: print("Zero Division!") print("THE END.")

Произошли радикальные изменения - теперь вывод кода выглядит так:

Arithmetic problem! THE END.

output

Почему, если возникшее исключение такое же, как и раньше?

Исключение то же самое, но более общее исключение теперь находится первым в списке - оно также перехватит все деления на ноль. Это также означает, что нет никаких шансов, что какое-либо исключение попадет в ветку ZeroDivisionError. Эта ветка теперь совершенно нерабочая.

Помните:

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


Code

try:
y = 1 / 0
except ZeroDivisionError:
print("Zero Division!")
except ArithmeticError:
print("Arithmetic problem!")

print("THE END.")
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×