我最近发现try
声明(我很新),我知道except
,但我有一些问题:
1)我如何使用finally
?
2)你有多个except
个不同的错误吗?
你能举一些这方面的例子吗?
答案 0 :(得分:3)
对你要求的一切回答是肯定的。
try:
raise ArithmeticError
except ValueError:
print("caught valueerror")
except RuntimeError:
print("caught runtimeerror")
finally:
print("I'll do this everytime")
输出:
I'll do this everytime
Traceback (most recent call last):
File "<pyshell#13>", line 2, in <module>
raise ArithmeticError
ArithmeticError
简而言之。要获得完整的解释,你最好看一个教程,其中有数百万在线。我喜欢这样做的一些一般规则是:
我们已经看到了当您遇到错误时最终的行为方式,除了上述情况之外没有其他错误,这里举例说明当您引发错误时除外:
try:
raise ValueError
except ValueError:
print("caught valueerror")
except RuntimeError:
print("caught runtimeerror")
finally:
print("I'll do this everytime")
caught valueerror
I'll do this everytime
即使您没有遇到错误,最终也会发生:
try:
pass
except ValueError:
print("caught valueerror")
finally:
print("I'll do this everytime")
I'll do this everytime
有几种方法可以捕获任何错误(总是试图避免这种情况):
try:
raise ArithmeticError
except BaseException as e:
print("caught unknown error: ", e)
finally:
print("I'll do this everytime")
('caught unknown error: ', ArithmeticError())
I'll do this everytime
或者你可以做到
import sys
try:
raise ArithmeticError
except:
print("caught unknown error: ", sys.exc_info()[0])
finally:
print("I'll do this everytime")
('caught unknown error: ', <type 'exceptions.ArithmeticError'>)
I'll do this everytime
另外,try除了block之外还可以有else语句。
想象一下,在某种情况下,您希望从raise
语句中运行一些额外的代码appart。想象一下,代码也会抛出错误。把那些代码放在同一个try块中会破坏我的第一点,那不是我们应该做的事情!到目前为止,用我所展示的内容来解决这个问题:
executed = True
try:
[do something]
except ValueError:
executed = False
print("caught valueerror")
finally:
print("I'll do this everytime")
if executed:
[do something more]
我相信你会同意它的丑陋和可读性低于python通常所追求的目标。这就是为什么除了阻止之外你还可以在try中添加其他声明的原因。
else语句必须遵循所有例外情况,并且只有在没有引发错误的情况下才会执行。要真正技术化,它只会执行&#34;如果它从try语句流出&#34;。这意味着必须没有返回,中断,继续以及导致“跳跃”的声明。否则也会使你的代码更整洁,更强大,但我很少使用它或看到它被使用过:
try:
[do something]
pass
except ValueError:
print("caught valueerror")
except RuntimeError:
print("caught runtimeerror")
else:
[do something more but only if there were no exceptions so far]
print("I found no errors and executed else statement")
raise ArithmeticError
finally:
print("I'll do this everytime")
I found no errors and executed else statement
I'll do this everytime
Traceback (most recent call last):
File "<pyshell#41>", line 7, in <module>
raise ArithmeticError
ArithmeticError