как работают исключения exceptions в python на примере.
обратите внимание на это приложение, особенно на все print, что они должны выводить. и что будет если вместо вызова исключения raise вы поставите pass какие print будут вызываны тогда. это поможет понять как работают исключения.
- Класс исключения
MyExceptions
определен с помощью наследования отException
. - Обработчик исключения
except MyExceptions:
в функцииdoit()
перехватывает исключениеMyExceptions
. - После того как функция
myfunc1()
вызывает исключение, выполнение передается вверх по стеку вызовов, пока не будет найден соответствующий обработчик исключения или пока программа не завершится, если обработчик не будет найден. - После обработки исключения в функции
doit()
, другиеprint
в коде не будут выполнены, так как выполнение функции будет прервано после обработки исключения.
☯
Terminal:
⌕
≡
✕
# Определение класса исключения class MyExceptions(Exception): pass def doit(): try: doit1() except MyExceptions: print("Обработка исключения MyExceptions в функции doit") def doit1(): doit2() print(1) def doit2(): myfunc1() print(2) def myfunc1(): #pass raise MyExceptions("Пример исключения MyExceptions") # Вход в приложение doit()
создайте файл например except.py с этим кодом, и выполните python except.py
а затем закомментируйте reise и расскомментируйте pass
и снова выполните скрипт, и сравните вывод в консоле, чтобы понять логику происходящего
Вот ещё один пример
Когда вы вызываете raise для возбуждения исключения, выполнение кода в текущем блоке прекращается, и интерпретатор Python начинает искать соответствующий обработчик для этого исключения. Если обработчик не будет найден в текущем блоке, интерпретатор поднимается по стеку вызовов и проверяет более высокие уровни кода на наличие соответствующего обработчика.
Если ни в одном из вышестоящих блоков кода не найден подходящий обработчик исключения, выполнение программы будет прервано, и интерпретатор Python выдаст трассировку стека и сообщение об ошибке.
Таким образом, если обработчик исключения не будет найден в текущем блоке кода или в вызывающем его блоке кода, код, следующий за raise, не будет выполнен. Однако, если найден соответствующий обработчик, выполнение программы может быть продолжено после выполнения этого обработчика.
☯
Terminal:
⌕
≡
✕
try: raise ValueError("Пример исключения") print("Этот код не будет выполнен") except ValueError as e: print("Обработчик исключения:", e) print("Этот код будет выполнен после обработки исключения")
В этом примере после вызова raise код, следующий за ним, не будет выполнен. Однако, после обработки исключения в блоке except, выполнение программы продолжится, и код, следующий за блоком except, будет выполнен.
-
- Roman Sakhno
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.