获取异常消息的更好方法是:str(e)vs e.args[0]?

2024-05-17 00:52:14 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们考虑这样一个例子:我用消息抛出内置的Exception,在处理它时,我存储异常消息。我知道我可以用两种方法来做,就像下面的一个例子。在

try:
    raise Exception('some message')
except Exception as e:
    value_str = str(e)
    value_args = e.args[0]

是否有任何理由认为一种方法优于另一种方法?


Tags: 方法消息messagevalueasexceptionargssome
1条回答
网友
1楼 · 发布于 2024-05-17 00:52:14

一般来说,使用str(e)会更安全,因为在某些情况下,e.args[0]会引发索引错误:

try:
    raise Exception()
except Exception as e:
    value = e.args[0]

>>> IndexError: tuple index out of range

还有一些情况下,第一个参数实际上不是消息,而str(e)只是调用e.__str__(),后者应该始终返回消息。在

但是,在您的特定情况下,使用e.args[0]似乎要快一些:

^{pr2}$

如果执行速度的最小增加很重要,并且您确定e始终至少有一个参数,请选择e.args[0]。在捕捉特定类型的异常时,还可以考虑直接访问属性。在所有其他情况下,我建议使用str(e)。在

有关从异常中检索信息的更多选项,请参见^{} module。在

相关问题 更多 >