为什么Exception不打印?
在REPL,我可以打印一个异常的字符串表示:为什么Exception不打印?
>>> 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!')
在REPL,我可以打印一个异常的字符串表示:
>>> print(str(ValueError)) <class 'ValueError'>
不,您正在打印异常的字符串表示形式类。当你做
raise ValueError
ValueError
是不是实际上是被抛出的异常对象。 Python隐含地提高了ValueError()
,而的str
表示为空。
你没有提供任何参数传递给该最终创建的实例,就没有什么可打印。
供应,这将最终会被初始化,并作为参数提供它打印出来的消息:
try:
raise ValueError("What value error?")
except Exception as e:
print(str(e))
print('We crashed!')
What value error?
We crashed!
而且,虽然我知道这仅仅是一个示范,我不得不指出的是,使用Exception
作为在你的处理器的目标是不好的做法:-)
它不打印异常消息,但你必须仔细一看:
>>> def crash():
... raise ValueError
>>> try:
... crash()
... except Exception as e:
... print(str(e))
... print('We crashed!')
We crashed!
在“我们哗啦啦”前面的空行是你在做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()
(注意paranthesis)。
四个答案完成彼此,所以很难选择一个。 +1,谢谢。 :) –
正如user2357112在您的except块中的答案,您正尝试打印ValueError的实例而不是ValueError类。如果你想打印类,请尝试下面的内容。
try:
raise ValueError
except Exception as e:
print(e.__class__)
print('We crashed!')
四个答案完成彼此,所以很难挑选一个。 +1,谢谢。 :) –
四个答案完成彼此,所以很难挑选一个。 +1,谢谢。:) –