错误和异常概述
Python程序中最常见的错误为语法错误。语法错误又称为解析错误,它是指开发人员编写了不符合Python语法格式的代码所引起的错误。含有语法错误的程序会抛出异常,无法运行。如下所示为一段包含语法问题的代码:
while True
print("语法格式错误")
上述示例代码中的循环语句后少了冒号(:),不符合Python的语法格式。因此语法分析器会检测到错误。
在PyCharm中运行上述代码后,错误信息会在结果输出区进行显示,具体如下:
File " D:/Python项目/异常.py ", line 1
while True
^
SyntaxError: invalid syntax
以上错误信息中包含了错误所在的行号、错误类型和具体信息,错误信息中使用小箭头(^)指出语法错误的具体位置,方便开发人员快速地定位并修正。产生语法错误时引发的异常类型为SyntaxError。
一段语法格式正确的Python代码在运行时产生的错误称为异常。如果这些异常不被处理,程序默认的处理方式是直接崩溃。
程序运行时产生异常,示例如下:
for i in 3:
print(i)
运行代码,结果如下所示:
Traceback (most recent call last):
File "D:/Python项目/异常.py", line 7, in <module>
for i in 3:
TypeError: 'int' object is not iterable
上述语句没有任何语法格式错误,但代码执行后出现TypeError异常,这是因为使用for循环对一个整数进行遍历,而for循环不支持对整数类型的遍历。
在Python中所有的异常均由类实现,所有的异常类又继承自BaseException类,程序运行时出现的异常大多继承自Exception类。如图1所示为Python中异常类的继承关系。
图1 Python中异常类的继承关系
因为SyntaxError、FileNotFoundError、NameError等常见异常均继承自Exception类,所以本章主要对Exception类及其子类进行介绍,Exception中常见的子类及其描述如表1所示。
表1 Exception中常见的子类
类名 | 描述 |
---|---|
SyntaxError | 发生语法错误时引发 |
FileNotFoundError | 未找到指定文件或目录时引发 |
NameError | 找不到指定名称的变量时引发 |
ZeroDivisionError | 除数为0时的异常 |
IndexError | 当使用超出列表范围的索引时引发 |
KeyError | 当使用映射不存在的键时引发 |
AttributeError | 当尝试访问未知对象属性时引发 |
TypeError | 当试图在使用a类型的场合使用b类型时引发 |