一、啥是异常
异常是指程序运行是时报错,如果没有进行异常处理,会导致程序终止。
二、异常的常见种类
1、常见异常
这里只列举几个最常见的异常,
- ImportError,无法引入模块或包,大部分是路径问题或名称错误。
- IOError,输入输出异常,大部分是无法打开文件。
- TypeError,传入对象类型与要求的不符合。
- NameError,使用一个还未被赋予对象的变量。
- ValueError,传入一个调用者不期望的值,即使值的类型是正确的。
- KeyError,尝试访问字典里不存在的键。
- SystemError,一般的解释器系统错误。
- KeyboardInterrupt,用户中断执行。
- ZeroDivisionError,除(或取模)零。
2、语法错误
错误按正常是不应该包含在异常里面的,但是其中的语法错误也是非常常见的,我们这里也简单提一下。语法错误(SyntaxError: invalid syntax),在编辑器里面编译的时候就会报错,执行后会提示在第几行有错误,非常清晰。
三、异常处理
考虑到程序的健壮与容错性,我们需要对潜在的异常进行处理,防止因异常而导致的程序崩溃。最常用的的异常处理方式是:try……except,语法看下图,
其中执行流程为:首先执行try语句;若try语句无异常发生,则跳过except子句,try语句执行后结束;若try语句有异常,则try语句余下的部分将被忽略,进入except部分,一层层匹配异常类型后执行。
其中 try 语句可以包含多个 except 语句,分别来处理不同的特定的异常,但最多只有一个except 分支会被执行。
四、抛出异常
Python3 中使用 raise 语句抛出一个指定的异常。raise只有一个参数,用来指定要被抛出的异常,她必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
五、自定义异常
如果项目有需求,python3也支持用户自定义异常和对应的清理行为。自定义的异常类继承Exception 基类即可,对应的清理行为也可以自定义,有兴趣的可以自己尝试下。