Module (76%)
Section (67%)

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

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

Давайте перейдем к следующей части курса и посмотрим на механизм в действии.



Code

try:
x = int(input("Enter a number: "))
y = 1 / x
except:
print("Oh dear, something went wrong...")

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