从Python标准库的组件中获取异常消息的最佳方法是什么?
我注意到在某些情况下,您可以通过如下message
字段获取它:
try:
pass
except Exception as ex:
print(ex.message)
但在某些情况下(例如在套接字错误的情况下),您必须执行以下操作:
try:
pass
except socket.error as ex:
print(ex)
我想知道是否有标准方法可以涵盖大多数情况?
如果查看内置错误的文档,则会看到大多数Exception
类将其第一个参数分配为message
属性。并非所有人都这样做。
值得注意的是,EnvironmentError
(与子类IOError
和OSError
)具有的第一自变量errno
,第二的strerror
。没有message
…strerror
大致类似于通常的message
。
更一般而言,的子类Exception
可以执行他们想要的任何操作。它们可能具有也可能没有message
属性。将来的内置Exception
可能没有message
属性。Exception
从第三方库或用户代码导入的任何子类都可能没有message
属性。
我认为处理此问题的正确方法是,识别Exception
要捕获的特定子类,然后仅捕获那些子类,而不是所有带有的except Exception
子类,然后利用特定子类定义的所需属性。
如果您必须执行print
某些操作,则我认为打印捕获到的Exception
自身最有可能执行您想要的操作,无论它是否具有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中进行呢? 以下是正确的方法吗? 问题答案: 要么 所不同的是,第一个也将赶上KeyboardInterrupt,SystemExit和类似的东西,这是直接来源于,没有
问题内容: 我想在我的C ++应用程序中嵌入python。我正在使用Boost库-很棒的工具。但是我有一个问题。 如果python函数引发异常,我想捕获它并在我的应用程序中打印错误,或者获取一些详细信息,例如导致错误的python脚本中的行号。 我该怎么做?我找不到任何函数来获取Python API或Boost中的详细异常信息。 PyErr_Print()只是将错误文本打印到stderr并清除错误
问题内容: 如何获得在Python中引发的异常的名称? 例如, 例如,我正在捕获多个(或所有)异常,并想在错误消息中打印异常的名称。 问题答案: 以下是获取异常类名称的几种不同方法: 例如,
如何使pytest打印回溯,所以我将看到在任何函数中的哪里引发了异常?
我使用改装: 2.0.0-beta4为我的Android应用程序。 我试图添加一个改型用户,该用户已在数据库中正确创建,但出现以下错误: 服务器返回的结果是: 这是正确的json格式,我不明白为什么会出现这样的异常? 下面是我的界面: 调用方代码是: 有人能提供线索吗?