异常捕获
①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将会警告你它不能自动修复这种语法。