Исключения: продолжение
Посмотрите на код в редакторе. Что в нем происходит?
Первая подходящая ветвь - содержащая 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 не будет генерировать никаких сообщений об ошибках по этому поводу.