Исключения: продолжение
У этого подхода есть один важный недостаток - если существует вероятность того, что более чем одно исключение может быть передано в ветку except:
, у Вас может возникнуть проблема с выяснением того, что на самом деле произошло. р>
Как в нашем коде в редакторе. Запустите его и посмотрите, что произойдет.
Сообщение: Oh dear, something went wrong...
в консоли ничего не говорит о причине, хотя есть две возможные причины исключения:
- не целочисленные данные, введенные пользователем;
- целочисленное значение, равное
0
, присвоенное переменнойx
.
Технически существует два способа решения проблемы:
- Создать два последовательных блока try-except, один для каждой возможной причины исключения (легко, но приведет к неблагоприятному росту кода);
- использовать более продвинутый вариант инструкции.
try:
:
except exc1:
:
except exc2:
:
except:
:
Как это работает:
- если ветвь
try
вызывает исключениеexc1
, оно будет обрабатываться блокомexcept exc1:
; - аналогично, если ветвь
try
вызывает исключениеexc2
, оно будет обрабатываться блокомexcept exc2:
; - если ветвь
try
вызывает любое другое исключение, оно будет обрабатываться безымянным блокомexcept
.
Давайте перейдем к следующей части курса и посмотрим на механизм в действии.