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

标签 python python-3.x exception logging

如果出现异常,我希望程序捕获它们,记录它们,然后继续进行下一次迭代。显然仍然应该引发 KeyboardInterrupt 以便可以停止程序,但是我还应该引发任何其他异常吗?

下面是非常粗略的代码示例。这是一个捕获异常并记录它们的装饰器。基本上,我应该有任何其他异常(exception)案例吗?

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


谢谢。

最佳答案

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

关于python - 如果我想捕获并记录(而不是引发)异常,KeyboardInterrupt 应该是唯一引发的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56705020/

相关文章:

exception - 是什么导致了我的 OLEDbException,IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败

python - 使用 pandas groupby 查找列最大值的日期和值

python - pygame 不显示我的图像

python - string.format 中小数位数可变

ios - Swift 中的“NSInternalInconsistencyException”

java - 运行 jar 时出现运行时异常

python - 简单的 "blurring"数组表示来自第一原理的 python 中的图像

Python:将可迭代的元组转换为可迭代的字符串

python - 有没有一种优化的方法来查找灰度图像的左上角和右下角像素?

python-3.x - 读取文件时删除子进程缓冲区