Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:访问原始异常的异常消息_Python_Exception - Fatal编程技术网

Python:访问原始异常的异常消息

Python:访问原始异常的异常消息,python,exception,Python,Exception,我有以下两项职能: >>> def spam(): ... raise ValueError('hello') ... >>> def catch(): ... try: ... spam() ... except ValueError: ... raise ValueError('test') 尝试捕获第二个ValueError异常工作正常,并打印异常的错误消息: >>> try:

我有以下两项职能:

>>> def spam():
...     raise ValueError('hello')
...
>>> def catch():
...     try:
...         spam()
...     except ValueError:
...         raise ValueError('test')
尝试捕获第二个
ValueError
异常工作正常,并打印异常的错误消息:

>>> try:
...     catch()
... except ValueError as e:
...     print(e)
...
test
但是,是否有任何方法可以访问原始异常的错误消息(即
'hello'
)?我知道我可以打印完整的回溯:

>>> try:
...     catch()
... except ValueError as e:
...     import traceback
...     print(traceback.format_exc())
...
Traceback (most recent call last):
  File "<stdin>", line 3, in catch
  File "<stdin>", line 2, in spam
ValueError: hello

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 5, in catch
ValueError: test
>>试试:
...     捕获()
... 除ValueError为e外:
...     导入回溯
...     打印(traceback.format_exc())
...
回溯(最近一次呼叫最后一次):
catch中第3行的文件“”
垃圾邮件中第2行的文件“”
ValueError:你好
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
catch中第5行的文件“”
ValueError:测试

但我并不想解析该字符串中的
hello
。有没有一种方法可以访问异常列表及其各自的消息,我只需从中获取第一条消息?

解决了这个问题:原始异常可以通过
e.\uuuuuuuu原因\uuuuuu

运行什么Python版本?使用Python 3.4。除非异常是通过
引发的。。。从…
语句中,原始异常存储在
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu上下文中,而不是
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。因此,使用
print(e.\uuuuu cause\uuuuu或e.\uuuu context\uuuuuu)
应该是一种方法。有没有不访问私有属性的方法呢?@simpleuser Python没有私有属性。您可能将它们误认为是名称损坏的属性(格式为
\uu attr
:两个前导下划线,没有尾随),但两者都不是。如果是,则必须将其称为
e.\u Exception\uuuu cause\uuuu
,这是Python拥有的最私密的访问权限。@simpleuser如何使用str(e)来获取错误消息
str(ValueError(“某些错误消息”))
返回“某些错误消息”。