В этом шаге вы узнаете, как проверять конкретные классы исключений непосредственно в блоках except
. Это более прямой и часто более понятный способ обработки исключений по сравнению с использованием функции isinstance()
.
Давайте создадим скрипт на Python, чтобы продемонстрировать это.
-
Откройте редактор VS Code.
-
Создайте новый файл с именем exception_classes.py
в директории ~/project
.
~/project/exception_classes.py
-
Добавьте следующий код в файл exception_classes.py
:
try:
result = 10 / 0
except ZeroDivisionError as e:
print("Caught a ZeroDivisionError:", e)
except ArithmeticError as e:
print("Caught an ArithmeticError:", e)
except Exception as e:
print("Caught some other exception:", e)
print("Program continues...")
В этом скрипте мы пытаемся разделить 10 на 0, что вызовет исключение ZeroDivisionError
. У нас есть три блока except
: один для ZeroDivisionError
, один для ArithmeticError
и один для Exception
.
-
Запустите скрипт, используя следующую команду в терминале:
python exception_classes.py
Это выведет на терминал сообщение "Caught a ZeroDivisionError: division by zero".
Пример вывода:
Caught a ZeroDivisionError: division by zero
Program continues...
Вывод показывает, что исключение ZeroDivisionError
было перехвачено первым блоком except
.
Теперь давайте изменим скрипт, чтобы вызвать другое исключение.
-
Измените файл exception_classes.py
следующим образом:
try:
result = int("abc")
except ZeroDivisionError as e:
print("Caught a ZeroDivisionError:", e)
except ValueError as e:
print("Caught a ValueError:", e)
except ArithmeticError as e:
print("Caught an ArithmeticError:", e)
except Exception as e:
print("Caught some other exception:", e)
print("Program continues...")
В этом измененном скрипте мы пытаемся преобразовать строку "abc" в целое число, что вызовет исключение ValueError
.
-
Запустите скрипт снова, используя ту же команду:
python exception_classes.py
Это выведет на терминал сообщение "Caught a ValueError: invalid literal for int() with base 10: 'abc'".
Пример вывода:
Caught a ValueError: invalid literal for int() with base 10: 'abc'
Program continues...
Этот вывод показывает, что исключение ValueError
было перехвачено вторым блоком except
.
Указав класс исключения непосредственно в блоке except
, вы можете обрабатывать различные типы исключений четко и организованно. Этот подход обычно предпочтительнее, чем использование функции isinstance()
для простой обработки исключений.