Python 有很多异常,熟悉几个常见异常是有必要的。
11.3.1 AttributeError异常
AttributeError
异常试图访问一个类中不存在的成员(包括:成员变量、属性和成员方法)而引发的异常。
示例代码如下:
# 定义 Animal 类
class Animal(object):
pass
a1 = Animal()
# 试图访问 Animal 类的 run() 方法
# 由于 Animal 类中没有定义 run() 方法
# 结果抛出 AttributeError 异常
a1.run()
# 试图访问 Animal 类的实例变量(或属性)age
# 结果抛出 AttributeError 异常
print(a1.age)
# 试图访问 Animal 类的类变量 weight
# 结果抛出 AttributeError 异常
print(Animal.weight)
执行结果:
Traceback (most recent call last):
File "Exception.py", line 12, in <module>
a1.run()
AttributeError: 'Animal' object has no attribute 'run'
Traceback (most recent call last):
File "Exception.py", line 18, in <module>
print(a1.age)
AttributeError: 'Animal' object has no attribute 'age'
Traceback (most recent call last):
File "Exception.py", line 22, in <module>
print(Animal.weight)
AttributeError: type object 'Animal' has no attribute 'weight'
11.3.2 OSError异常
OSError 是操作系统相关异常。
Pyhon 3.3 版本后 IOError
(输入输出异常)也并入到 OSError
异常,所以输入输出异常也属于 OSError
异常。
例如 “未找到文件” 或 “磁盘己满” 异常。
示例代码如下:
# 是打开当前目录下的 abc.txt 文件
# 由于不存在该文件,所以抛出 FileNotFoundError 异常
# FileNotFoundError 属于 OSError 异常
f = open("abc.txt")
执行结果:
Traceback (most recent call last):
File "Exception.py", line 27, in <module>
f = open("abc.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'abc.txt'
11.3.3 IndexError异常
IndexError 异常是访问序列元素时,下标索引超出取值范围所引发的异常。
示例代码如下:
# 代码 code_list[4]试图访问 code_list 列表的第 5 个元素
# 由于 code_list 列表最多只有 4 个元素,所以会引发 IndexError 异常
code_list = [125, 56, 89, 36]
print(code_list[4])
执行结果:
Traceback (most recent call last):
File "Exception.py", line 35, in <module>
print(code_list[4])
IndexError: list index out of range
11.3.4 KeyError异常
KeyError 异常是试图访问字典里不存在的键时而引发的异常。
示例代码如下:
dict[104]
执行结果:
Traceback (most recent call last):
Fi le "<pyshell#14>", l ine 1, in <module>
dict1[104]
KeyError 104
试图访问字典 dict1
中键为 104
的值,104
键在字典 dict1
中不存在,所以会引发 KeyError
异常。
11.3.5 NameError异常
NameError 是试图使用一个不存在的变量而引发的异常。
示例代码如下:
value1
a = value1
执行结果:
NameError: name 'value1' is not defined
读取 value1
变量值,由于之前没有创建过 value1
,所以会引发 NameError
。
11.3.6 TypeError异常
TypeError 是试图传入变量类型与要求的不符合时而引发的异常。
示例代码如下:
i = "2"
print(5 / i)
执行结果:
TypeError: unsupported operand type(s) for /: 'int' and 'str'
代码 (5 / i)
表达式进行除法计算,需要 i 变量是一个数字类型。
然而传入的却是一个字符串,所以引发 TypeError
异常。
11.3.7 ValueError异常
ValueError 异常是由于传入一个无效的参数值而引发的异常。
示例代码如下:
i = "QWE"
print(5 / int(i))
执行结果:
ValueError: invalid literal for int() with base 10: 'QWE'
代码 (5 / int(i))
表达式进行除法计算,需要传入的变量 i
是能够使用 int()
函 数转换为数字的参数。
然而传入的字符串 “QWE
” 不能转换为数字,所以引发了 ValueError
异常。