python异常处理
一、try....expect语句
python中一小段语句如果有非常多的报错可能,就会使用try。。。expect语句进行异常处理,try关键字下的代码块为正常的功能代码,用expect捕捉可能出现的报错,如果捕捉到了就执行expect下的代码进行异常处理而不再报错,要注意的是语法错误是捕捉不到的。基本用法如下
try: x except NameError: print('变量未定义') -------------------------------------------------------------------------------------- 变量未定义
try...expect语句中expect可以连用多个,当出现报错时try中的剩余代码不会再执行,然后按顺序寻找可以处理的expect语句,当找到可以的expect语句后就不再继续寻找并且执行expect语句下的代码。
try: # x int('abc') print('ok') #上一步报错,这句不再执行 except NameError: print('变量未定义') except ValueError: print('请输入一个数字') -------------------------------------------------------------------------------------- 请输入一个数字
万能报错Exception可以捕捉到所有类型的报错并以as起别名,输出别名就是报错信息,这个同样适用于其他类型的报错。Exception一般放在所有异常处理的最后一步。
try: # x # int('abc') l=[] l[10] print('ok') except NameError: print('变量未定义') except ValueError: print('请输入一个数字') except Exception as e: print(e) -------------------------------------------------------------------------------------- list index out of range
else也可以用在异常处理中,当try语句下的代码正常执行完就执行else下的代码
try: # x # int('abc') # l=[] # l[10] print('ok') except NameError: print('变量未定义') except ValueError: print('请输入一个数字') except Exception as e: print(e) else: print('执行else') -------------------------------------------------------------------------------------- ok 执行else
finally语句则不管try语句下的代码是否正常执行完都会执行
try: # x # int('abc') # l=[] # l[10] 1/0 print('ok') except NameError: print('变量未定义') except ValueError: print('请输入一个数字') except Exception as e: print(e) else: print('执行else') finally: print('执行finally') -------------------------------------------------------------------------------------- division by zero 执行finally
异常处理外的代码不受其影响,不管异常处理中的代码是否报错,都会执行
try: # x # int('abc') # l=[] # l[10] 1/0 print('ok') except NameError: print('变量未定义') except ValueError: print('请输入一个数字') except Exception as e: print(e) else: print('执行else') finally: print('执行finally') print('not in try') ---------------------------------------------------------------------------------- division by zero 执行finally not in try
最后需要注意的是try。。。expect语句只能捕捉try语句下当前代码块的报错,如果再try语句中执行调用函数,那么函数的报错是无法被捕捉到的。另外一般情况不要在expect下写pass语句跳过异常处理,这样对调试代码非常不利。

浙公网安备 33010602011771号