从 Python 标准库的组件中获取异常消息的最佳方法是什么?
我注意到在某些情况下,您可以通过 message
字段获取它,如下所示:
try:
pass
except Exception as ex:
print(ex.message)
但在某些情况下(例如,在套接字错误的情况下)您必须执行以下操作:
try:
pass
except socket.error as ex:
print(ex)
我想知道是否有任何标准方法可以涵盖大多数这些情况?
最佳答案
如果您查看 documentation for the built-in errors ,您会看到大多数 Exception
类将它们的第一个参数分配为 message
属性。但并非所有人都这样做。
值得注意的是,EnvironmentError
(具有子类 IOError
和 OSError
)的第一个参数是 errno
,第二个参数是strerror
。没有 message
... strerror
大致类似于通常的 message
。
更一般地说,Exception
的子类可以为所欲为。它们可能有也可能没有 message
属性。 future 的内置 Exception
可能没有 message
属性。从第三方库或用户代码导入的任何 Exception
子类可能没有 message
属性。
我认为处理这个问题的正确方法是识别你想要捕获的特定 Exception
子类,然后只捕获那些而不是所有带有 except Exception
的子类,然后使用特定子类定义的任何属性。
如果你必须 print
一些东西,我认为打印捕获的 Exception
本身最有可能做你想做的事,无论它是否有 message
属性与否。
如果你愿意,你也可以检查 message 属性,像这样,但我不会真的建议它,因为它看起来很乱:
try:
pass
except Exception as e:
# Just print(e) is cleaner and more likely what you want,
# but if you insist on printing message specifically whenever possible...
if hasattr(e, 'message'):
print(e.message)
else:
print(e)
关于python - 如何在 Python 中正确获取异常消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239308/