在REPL中,我可以打印异常的字符串表示形式:
>>> print(str(ValueError))
<class 'ValueError'>
>>> print(ValueError)
<class 'ValueError'>
在这个简单的代码中,值不是打印。我错过了什么?
第一种味道:
try:
raise ValueError
except Exception as e:
print(str(e))
print('We crashed!')
这只是输出我们崩溃了!
第二种味道输出相同。 print(str(e))
发生了什么?
第二种味道:
def crash():
raise ValueError
try:
crash()
except Exception as e:
print(str(e))
print('We crashed!')
答案 0 :(得分:2)
在REPL中,我可以打印异常的字符串表示形式:
>>> print(str(ValueError)) <class 'ValueError'>
不,您正在打印异常类的字符串表示形式。当你这样做
raise ValueError
ValueError
实际上不是引发的异常对象。 Python隐式提升ValueError()
,而的str
为空。
答案 1 :(得分:1)
您没有向最终创建的实例提供任何args,没有任何内容可供打印。
通过初始化并提供它作为参数来提供最终打印出来的消息:
try:
raise ValueError("What value error?")
except Exception as e:
print(str(e))
print('We crashed!')
What value error?
We crashed!
另外,虽然我知道这只是一个演示,但我不得不指出在处理程序中使用Exception
作为目标是不好的做法: - )
答案 2 :(得分:1)
它会打印异常消息,但您必须仔细查看:
>>> def crash():
... raise ValueError
>>> try:
... crash()
... except Exception as e:
... print(str(e))
... print('We crashed!')
We crashed!
&#34;前面的空行我们坠毁了#34;是您在执行raise ValueError
时提供的错误消息(空字符串)。要使用repr
而不是str
来表示您的例外情况:
>>> try:
... crash()
... except Exception as e:
... print(repr(e))
... print('We crashed!')
ValueError()
We crashed!
请注意raise ValueError
is just a shorthand for raise ValueError()
(请注意副词)。
答案 3 :(得分:1)
在user2357112中,在您的except块中回答您正在尝试打印ValueError实例而不是ValueError类。如果你想打印课程,请尝试下面的内容。
try:
raise ValueError
except Exception as e:
print(e.__class__)
print('We crashed!')