在出现异常的情况下,我希望程序捕获它们,记录它们,然后继续进行下一个迭代。显然应该仍然引发KeyboardInterrupt以便可以停止程序,但是我还有其他异常需要引发吗?
下面的代码非常粗糙。这是一个装饰器,可捕获异常并记录它们。基本上,我还有其他except
个案例吗?
def exception_logger(func):
@wraps(func)
def wrapper(*args, **kwargs):
# Run as normal
try:
return func(*args, **kwargs)
except KeyboardInterrupt:
raise
# Any other exception that occurs is logged
except:
log_file = 'example.txt'
logger = logger_format(log_file)
logger.exception(f'\nAn exception occurred with: {func.__qualname__}\n')
print(f'\n\nAn exception occurred with: {func.__qualname__}\nView the log file for details.\n'.upper())
return wrapper
谢谢。
答案 0 :(得分:1)
您应该只捕获Exception
,而不要使用except:
,而不是黑名单(它可能会老化)。它不包括KeyboardInterrupt
和其他您不应禁止的其他内容。 (可以记录它们,但您似乎也不想这样做。)有关上下文,另请参见advice against except: pass
in particular。