python异常处理的else和finally子句
python的异常处理当中,除了try...except...这样的基本结构之外,还有另外两个子句,分别是else和finally,功能不同。
异常处理else子句
try...except...else模式的异常处理中,else必须写在except之后,而且,只有当try里的代码正常执行,没有发生任何异常,才能执行else,否则执行except里的代码,并跳过else,实例如下:
def exception():
try:
print('如果这里没有发生异常,则执行else子句。')
except NameError as err_N:
print('try里的异常被这里捕捉!')
else:
print('try里面没有发生异常。')
exception()
代码输出:
如果这里没有发生异常,则执行else子句。
try里面没有发生异常。
#现在讲try...except...else进行一番修改,如下:
def exception():
try:
print(something)
except NameError as err_N:
print('try里的异常被这里捕捉!')
else:
print('try里面没有发生异常。')
print('可见,try发生异常,则else就被跳过了')
exception()
代码输出:
try里的异常被这里捕捉!
可见,try发生异常,则else就被跳过了
异常处理finally子句
try...except...(else...)finally...的异常处理模式当中,不管try里是否发生异常,也不管except是否被正确捕捉,finally子句都能被执行,括号中的else可有可无。
def exception():
try:
print(1)
except NameError as err_N:
print('try里的异常被这里捕捉!')
else:
print('try里面没有发生异常。')
finally:
print('无论异常是否发生,也无论except是否将异常捕捉,finally都能被执行')
exception()
代码输出:
1
try里面没有发生异常。
无论异常是否发生,也无论except是否将异常捕捉,finally都能被执行
下一章节,我们将继续介绍python异常处理主动抛出异常的语法和一些可供查询的异常类。