1. ZeroDivisionError 的出现场景
进行除法运算时,要求被除数不能是 0,如果被除数是 0,则会产生异常,示例代码如下:
- 1
- 2
- 3
- 4
- 在第 4 行,因为被除数是 0,产生 ZeroDivisionError 类型的异常
2. AssertionError 的出现场景
编写代码时,常常需要在某些特定的位置做出一些假设,假设某些条件为真,Python 使用 assert 语句假设指定条件为真:
- 1
如果布尔表达式为真,assert 语句不做任何事情;如果布尔表达式为假,assert 语句抛出 AssertionError 类型的异常。
编写一个程序 AssertionError.py,功能是计算列表前 n 项元素之和:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 在第 1 行,calcSum 计算列表 list 的前 n 项之和
- 在第 2 行,使用 assert 语句验证参数 n 是否小于等于 list 的长度
- 正常情况下,n 是小于等于 list 的长度
- 如果 n 大于 list 的长度,则表示输入参数 n 有错误
- 在第 9 行,创建一个长度为 4 的列表
- 在第 10 行,传递参数 n 等于 3,是一个合法的参数
- 在第 11 行,传递参数 n 等于 5,是一个非法的参数
程序输出结果如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 在第 1 行,输出 sum = 66
- calc(sum, 3) 计算列表前 3 项
- 结果为 66
- 在第 7 行,输出 AssertionError
- calc(sum, 5) 计算列表前 5 项
- 列表只有 4 项元素
- 产生 AssertionError 类型的异常
3. AttributeError 的出现场景
Python 使用 object.property 的形式访问对象的属性,如果没有定义指定名称的属性,则会抛出 AttributeError 类型的异常。
编写程序 AttributeError.py,程序定义了类 Person,Person 包含有两个属性:name 和 age,代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 在第 1 行,定义类 Person,Person 包含有两个属性:name 和 age;
- 在第 6 行,实例化创建一个对象 tom;
- 属性 name 为 ‘tom’;
- 属性 age 为 10;
- 在第 7 行,访问属性 name ;
- 在第 8 行,访问属性 age;
- 在第 9 行,访问属性 address,在类 Person 中没有定义该属性。
程序输出结果如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 在第 1 行,输出属性 name 的值;
- 在第 2 行,输出属性 age 的值;
- 在第 1 行,属性 address 不存在,产生 AttributeError 类型的异常。
4. FileNotFoundError 的出现场景
python 使用函数 open(path) 打开指定路径的文件,如果文件不存在,则产生 FileNotFoundError 类型的异常,示例如下:
- 1
- 2
- 3
- 4
- 在第 4 行,因为文件 non-exist-file 不存在,产生 FileNotFoundError 类型的异常。
5. ModuleNotFoundError 的出现场景
python 使用关键字 import module_name 打开导入名称的模块,如果模块不存在,则产生 ModuleNotFoundError 类型的异常,示例如下:
- 1
- 2
- 3
- 4
- 在第 4 行,因为模块 non_exist_file 不存在,产生 ModuleNotFoundError 类型的异常
6. IndexError 的出现场景
在 Python 使用 list[index] 的形式访问列表 list 的指定位置的元素,要求 index:
- 大于等于 0
- 小于列表的长度
如果 index 不在合法范围,则产生 IndexError 类型的异常。
- 1
- 2
- 3
- 4
- 5
- 在第 1 行,创建长度为 3 的列表;
- 合法的 index 是 0、1、2;
- 在第 2 行,index 不在合法范围;
- 在第 5 行,产生 IndexError 类型的异常。
7. NameError 的出现场景
Python 在读取变量时,要求变量必须已经定义。如果读取一个尚未定义的变量,会产生 NameError 类型的异常。
- 1
- 2
- 3
- 4
- 5
- 在第 1 行,创建变量 variable;
- 在第 2 行,此处将 variable 错误的拼写成 varible;
- 变量 varible 还没有创建;
- 在第 5 行,产生 NameError 类型的异常。
8. SyntaxError 的出现场景
Python 程序中出现语法错误时,会产生 SyntaxError 类型的异常。编写程序 SyntaxError.py:
- 1
- 2
- 3
- 在第 1 行,有一处语法错误,在行尾缺少冒号 :
程序输出结果如下:
- 1
- 2
- 3
- 4
- 在第 1 行,File “SyntaxError.py”, line 1
- 指明错误在文件 SyntaxError.py 中的第 1 行
- 在第 4 行,产生 SyntaxError 类型的异常
9. IndentationError 的出现场景
Python 程序中出现缩进的语法错误时,会产生 IndentationError 类型的异常。编写程序 IndentationError.py:
- 1
- 2
- 3
- 在第 2 行,缩进为 4 个空格
- 在第 3 行,缩进为 2 个空格
程序输出结果如下:
- 1
- 2
- 3
- 4
- 在第 4 行,输出 IndentationError;
- 源程序第 2 行的缩进为 2 个空格;
- 源程序第 3 行的缩进为 4 个空格;
- 两者不匹配,产生 IndentationError 类型的异常。
11. Python 的标准异常类型总结
在上面的小节中讲解了常见的异常类型,Python 中全部的标准的异常类型如下: