Эти вопросы могут быть некорректны теоретически, но хотелось бы знать, есть ли обходной путь.
Давайте рассмотрим следующий пример:
def my_function():
try:
print("before the exception occurs")
raise ValueError
except ValueError:
print('exception found')
print("after the exception occurs")
if __name__ == "__main__":
my_function()
если вы печатаете в stdout, выводдолжно быть следующим:
before the exception occurs
exception found
after the exception occurs
Однако, если вы используете декоратор для перехвата исключения, как показано ниже:
from functools import wraps
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except ValueError:
print('exception found')
return wrapper
@decorator
def my_exception_function():
print("before the exception occurs")
raise ValueError
print("after the exception occurs")
if __name__ == "__main__":
my_exception_function()
остальная часть функции после возникновения исключения не будет выполненакак показано ниже:
before the exception occurs
exception found
Поэтому я хотел бы знать, есть ли обходной путь, который я могу использовать, чтобы получить вывод первого примера, но используя декоратор, чтобы перехватить исключение.