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