你能用python解释一下这个代码片段吗
我是python新手,需要一些帮助来理解此代码片段:你能用python解释一下这个代码片段吗,python,exception,exception-handling,Python,Exception,Exception Handling,我是python新手,需要一些帮助来理解此代码片段: for c in [B, C, D]: try: raise c() except D: print "D" except C: print "C" except B: print "B" 阅读python文档时,似乎raise()抛出了一个异常,但我不明白为什么raise()在try块中。是不是应该是这样的: try: //do something cat
for c in [B, C, D]:
try:
raise c()
except D:
print "D"
except C:
print "C"
except B:
print "B"
阅读python文档时,似乎raise()
抛出了一个异常,但我不明白为什么raise()
在try
块中。是不是应该是这样的:
try:
//do something
catch:
raise()
raise
是您首先引发异常的方式。异常处理程序中单独的raise
只会将异常传播到外部处理程序。该代码有点可笑,因为它是一种奇怪的处理方式,但很清楚发生了什么。列表[B,C,D]
是一个例外列表。由于异常是try
块中的raise
d,因此它立即由相应的except
处理程序处理(依次是except B:
、except C:
和except d:
处理程序)
因此,该代码相当于:
print "B"
print "C"
print "D"
除了如果B
、C
或D
中的任何一个不是异常,它将抛出一个(未捕获)异常。我假定raise()直接放在try中:只是为了说明。
即使在正常情况下,您也会放入导致异常的代码(即包含raise()的代码)在try内部,不是吗?在不知道代码应该完成什么的情况下,100%不可能知道哪个版本是正确的。哦,明白了。因此,try块中的代码本质上是根据
c
的值引发异常?它在c
中引发异常类的实例。在Python中,一切都是如此g是一个对象,包括类本身。名称c
依次绑定到每个类;c()
每次通过循环创建一个对应异常类的实例,然后是raise
d。是的,这有点可笑。它是基本python类的一部分,所以除了解释python中异常处理的概念之外,它实际上不应该实现任何功能。是的,你是对的。仔细考虑之后此外,我意识到在try
块中引发异常是有意义的