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语句跳过异常处理,这样对调试代码非常不利

posted @ 2017-08-17 15:14  魅力宁波  阅读(347)  评论(0)    收藏  举报