为什么异常不打印?

Han*_*ler 2 python exception python-3.x

在 REPL 中,我可以打印异常的字符串表示形式:

>>> print(str(ValueError))
<class 'ValueError'>
>>> print(ValueError)
<class 'ValueError'>
Run Code Online (Sandbox Code Playgroud)

在这个简单的代码中,不打印该值。我缺少什么?

第一口味:

try:
    raise ValueError
except Exception as e:
    print(str(e))
    print('We crashed!')
Run Code Online (Sandbox Code Playgroud)

这只是输出We crashed!

第二种口味输出相同。发生什么事了print(str(e))

第二种口味:

def crash():
    raise ValueError

try:
    crash()
except Exception as e:
    print(str(e))
    print('We crashed!')
Run Code Online (Sandbox Code Playgroud)

MSe*_*ert 6

它确实打印了异常消息,但你必须仔细观察:

>>> def crash():
...     raise ValueError
>>> try:
...     crash()
... except Exception as e:
...     print(str(e))
...     print('We crashed!')

We crashed!
Run Code Online (Sandbox Code Playgroud)

“We crashed”前面的空行是您在执行时提供的错误消息(空字符串)raise ValueError。要表示异常,请使用repr而不是str

>>> try:
...     crash()
... except Exception as e:
...     print(repr(e))
...     print('We crashed!')
ValueError()
We crashed!
Run Code Online (Sandbox Code Playgroud)

请注意,这只是(注意括号)raise ValueError的简写。raise ValueError()