如果我想捕获并记录(而不是引发)异常,那么KeyboardInterrupt是唯一引发的异常吗?

时间:2019-06-21 14:06:23

标签: python python-3.x exception logging

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


谢谢。

1 个答案:

答案 0 :(得分:1)

您应该只捕获Exception,而不要使用except:,而不是黑名单(它可能会老化)。它不包括KeyboardInterrupt和其他您不应禁止的其他内容。 (可以记录它们,但您似乎也不想这样做。)有关上下文,另请参见advice against except: pass in particular