#python #exception #logging #decorator
#python #исключение #ведение журнала #декоратор
Вопрос:
Я пытаюсь регистрировать и обрабатывать исключения в функции декоратора, а затем продолжить выполнение кода:
import asyncio
import logging
from functools import wraps
log = logging.getLogger(__name__)
def logger(func):
async def exception_handler(*arg, **kwargs):
try:
await func(*arg, **kwargs)
except Exception as err:
log.error(f"Exception occured: {err}")
# Send log to external system
return exception_handler
@logger
async def bad_division(dividend, divisors):
for divisor in divisors:
print(dividend / divisor)
print("How do I continue?")
if __name__ == '__main__':
dividend = 10
divisors = [2, 0, 4, 6, 8, 0]
asyncio.run(bad_division(dividend, divisors))
Возможно ли продолжить перебор for loop
без переноса print(dividend / divisor)
try catch
?
Комментарии:
1. Похоже на задание для контекстного менеджера, например
with log_exceptions(): print(dividend / divisor)
2. вы должны использовать
try/except
илиif divisor != 0:
с этой единственной строкой. Но вы не можете сделать это с помощью декоратора. Декоратор не может обернуть одну строку внутри функции.