Перехват конкретного исключения
На предыдущем этапе вы узнали о различных типах исключений в Python. Теперь вы узнаете, как перехватывать конкретное исключение с помощью блока try...except
. Это позволяет обрабатывать разные ошибки по-разному, делая ваш код более надежным.
При перехвате исключений рекомендуется быть как можно более конкретным. Это предотвращает случайное перехват исключений, которые блок except
не был предназначен для обработки, что может скрыть ошибки и усложнить отладку.
Давайте изменим скрипт exceptions_demo.py
так, чтобы он перехватывал конкретное исключение, например ValueError
, при попытке преобразования строки в целое число.
- Откройте файл
exceptions_demo.py
в каталоге ~/project
с помощью VS Code.
- Измените скрипт так, чтобы он перехватывал только
ValueError
при преобразовании строки в целое число:
try:
num = int("abc")
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
В этом примере мы специально перехватываем ValueError
, который возникает, когда int("abc")
завершается неудачно. Если в блоке try
возникнет какое-либо другое исключение, оно будет перехвачено блоком except Exception as e:
. Строка print("Continuing execution...")
всегда будет выполнена, если какое-либо исключение было перехвачено, что демонстрирует, что программа продолжает работу после обработки исключения.
Теперь запустим скрипт:
- Откройте терминал в VS Code.
- Перейдите в каталог
~/project
:
cd ~/project
- Запустите скрипт
exceptions_demo.py
с помощью команды python:
python exceptions_demo.py
Вы должны увидеть следующий вывод:
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...
Этот вывод показывает, что ValueError
был перехвачен, и программа продолжила выполнение.
Теперь изменим скрипт так, чтобы он вызывал другое исключение, например TypeError
, и посмотрим, как оно будет обрабатываться:
- Откройте файл
exceptions_demo.py
в каталоге ~/project
с помощью VS Code.
- Измените скрипт так, чтобы он вызывал
TypeError
:
try:
result = 1 + "a"
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
Теперь запустите скрипт еще раз:
python exceptions_demo.py
Вы должны увидеть следующий вывод:
Some other exception: unsupported operand type(s) for +: 'int' and 'str'
Continuing execution...
Этот вывод показывает, что TypeError
был перехвачен блоком except Exception as e:
, так как нет конкретного блока except TypeError
.
Перехват конкретных исключений позволяет обрабатывать разные ошибки по-разному, делая ваш код более надежным и легким для отладки. На следующем этапе вы узнаете, как проверить экземпляр исключения.