Skip to main content
 首页 » 编程设计

python之在 raise Error 和 logging the Error 之间,哪个是 Python 中更好的做法

2025年05月04日9over140

Python 教程中有一个称为错误和异常的部分,它使用的结构为;

try: 
    [statement] 
except [Built-in ExceptionType]: 
    do something when an exception has been captured. 
finally: 
    do something whether exception occurred or not. 

这也可以通过直接引发错误来处理。

try: 
    raise [Built-in ExceptionType] 
except [Built-in ExceptionType above] as e: 
    print(f'foo error: {e}') 

有几个内置的 ExceptionType,开发人员应该捕获开发人员应该查找的每个特定异常类型的良好做法。 (引用自Why is "except: pass" a bad programming practice?)

但是,在我阅读日志记录部分之后。我在考虑我想将错误记录到日志文件中并让用户知道错误(也许只是打印文本,用户可以通知 IT 支持)而不是在屏幕上抛出异常。因此,我可以使用以下错误消息并记录它,而不是上面的 try/except 组合。

if len(symbol) != 1: 
    error_message = f'Created box with symbol={symbol}, width={width} and height={height}, Symbol needs to be a string of length 1' 
    logger.error(error_message) 
    print(f'\nError! symbol={symbol}, width={width} and height={height} -- Symbol needs to be a string of length 1') 
    return 

我怀疑目前更好的做法是:

a) 在屏幕上引发错误

b) 记录错误以便进一步调查?

c) 其他方法(请建议我)

我希望我不是在尝试比较两个不同的事物。对我来说,我想选择 b) 并将错误存储在日志中。这更易于调查,并且不会向用户提供不必要的信息。但我不确定我是否在正确的轨道上。非常感谢。

请您参考如下方法:

记录和引发异常是两种不同的东西,用于两种不同的目的。日志让您可以在事后检查您的程序做了什么。引发异常对现在的程序流有重要影响。有时您想要一个,有时您想要另一个,有时您两个都想要。

问题始终是错误是预期的还是意外的,您是否有一些计划在错误发生时该怎么做,以及将错误的发生通知任何人是否有用。

应该捕获并处理您有“备份计划”的预期错误,这是常规程序控制流程。意外错误可能应该停止程序,或者至少停止它们发生的特定函数。如果上级调用者想要处理异常,请让他们处理。是否记录错误(除了处理或不处理错误之外)取决于是否有人可以从该日志条目中收集到任何有用的见解,或者它是否只是噪音。