异常捕获

2019-11-27  本文已影响0人  泡菜鸡丁

①try...except语句来处理异常

except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的异常/错误。没有给出错误或者异常的名称,则处理所有的错误和异常。

如果某个错误或异常没有被处理,默认的python处理器就会被调用。它会终止程序的运行,并且打印一个消息。

还可以关联上一个else从句,当没有异常发生的时候执行。

常见异常(可避免的):

使用不存在的字典关键字,将引发KeyError异常

搜索列表中不存在的值,将引发ValueError异常

调用不存在的方法,将引发AttributeError异常

引用不存在的变量,将引发NameError异常

未强制转换就混用数据类型,将引发TypeError异常

导入一个不存在的模块将引发一个ImportError异常

②try....fianlly

加入希望在无论异常发生与否都执行一段代码,可以使用finally块来完成。

注意,在一个try块下,你可以同时使用except从句和finally块。

如果在finally前面的try或者except,else等里面含有return语句,会先跳过finally再执行return

③raise语句

可以使用raise语句引发异常(抛出异常)。你还得指明错误/异常的名称和伴随异常触发的异常对象。

可以引发error或者exception类的直接或者间接导出类。

py2                py3

raise MyException    MyException

raise MyException,'error message'  raise MyException('error message')

raise MyException,'error message',a_traceback    raise MyException('error message'):with_traceback(a)

说明:

⒈抛出不带自定义错误信息的异常,这种最简单的形式下,语法没有改变

⒉抛出带自定义错误信息的异常时:py2用一个逗号来分隔类和错误信息,py3把错误信息作为参数传递给异常类

⒊抛出一个带用户自定义回溯(stack trace,堆栈追踪)的异常,py2和py3完全不同

⒋在py2里,可以仅仅抛出一个异常信息,在py3里,这种形式不再被支持。2to3将会警告你它不能自动修复这种语法。

上一篇下一篇

猜你喜欢

热点阅读