2024-05-17 00:52:14 发布
网友
让我们考虑这样一个例子:我用消息抛出内置的Exception,在处理它时,我存储异常消息。我知道我可以用两种方法来做,就像下面的一个例子。在
Exception
try: raise Exception('some message') except Exception as e: value_str = str(e) value_args = e.args[0]
是否有任何理由认为一种方法优于另一种方法?
一般来说,使用str(e)会更安全,因为在某些情况下,e.args[0]会引发索引错误:
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.__str__()
但是,在您的特定情况下,使用e.args[0]似乎要快一些:
如果执行速度的最小增加很重要,并且您确定e始终至少有一个参数,请选择e.args[0]。在捕捉特定类型的异常时,还可以考虑直接访问属性。在所有其他情况下,我建议使用str(e)。在
e
有关从异常中检索信息的更多选项,请参见^{} module。在
一般来说,使用
str(e)
会更安全,因为在某些情况下,e.args[0]
会引发索引错误:还有一些情况下,第一个参数实际上不是消息,而
str(e)
只是调用e.__str__()
,后者应该始终返回消息。在但是,在您的特定情况下,使用
^{pr2}$e.args[0]
似乎要快一些:如果执行速度的最小增加很重要,并且您确定
e
始终至少有一个参数,请选择e.args[0]
。在捕捉特定类型的异常时,还可以考虑直接访问属性。在所有其他情况下,我建议使用str(e)
。在有关从异常中检索信息的更多选项,请参见^{} module 。在
相关问题 更多 >
编程相关推荐