首页 > 解决方案 > 如果我想捕获并记录(不引发)异常,KeyboardInterrupt 应该是唯一引发的异常吗?

问题描述

在异常的情况下,我希望程序捕获它们,记录它们,然后继续下一次迭代。显然,仍然应该引发 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


谢谢。

标签: pythonpython-3.xexceptionlogging

解决方案


而不是黑名单(可能会老化),你应该只是捕捉Exception而不是使用except:. 它排除KeyboardInterrupt了你不应该压制的各种其他人。(记录它们可能没问题,但无论如何您似乎都不想这样做。)另请参阅关于上下文的特别反对建议。except: pass


推荐阅读