我们在编写程序时可能会犯一些错误,从而在我们尝试运行它时出现错误。一旦遇到未处理的错误,python 程序就会终止。这些错误可以大致分为两类:

  1. 语法错误
  2. 逻辑错误(异常)

Python 语法错误

由于不遵循语言的正确结构(语法)而导致的错误称为语法错误解析错误
让我们看一个例子:
>>> if a < 3 File ““, line 1 if a < 3 ^ SyntaxError: invalid syntax
如示例中所示,箭头指示解析器在何处遇到语法错误。
我们可以在这里注意到语句中:缺少一个冒号if。


Python 逻辑错误(异常)

运行时(通过语法测试后)发生的错误称为异常逻辑错误
例如,当我们尝试打开一个不存在的文件(用于读取)(FileNotFoundError),尝试将一个数字除以零(ZeroDivisionError),或尝试导入一个不存在的模块()时,就会发生这种情况ImportError。
每当发生这些类型的运行时错误时,Python 都会创建一个异常对象。如果处理不当,它会打印该错误的回溯以及有关该错误发生原因的一些详细信息。
让我们看看 Python 是如何处理这些错误的:
>>> 1 / 0 Traceback (most recent call last): File ““, line 301, in runcode File ““, line 1, in ZeroDivisionError: division by zero >>> open(“imaginary.txt”) Traceback (most recent call last): File ““, line 301, in runcode File ““, line 1, in FileNotFoundError: [Errno 2] No such file or directory: ‘imaginary.txt’


Python 内置异常

非法操作会引发异常。Python 中有很多内置异常,它们会在发生相应错误时引发。我们可以使用内置local()函数查看所有内置异常,如下所示:

print(dir(locals()[‘builtins‘]))
locals()[‘builtins‘]将返回一个包含内置异常、函数和属性的模块。dir允许我们以字符串的形式列出这些属性。
下面列出了 Python 编程中一些常见的内置异常以及导致它们的错误:

例外 错误原因
AssertionError 当assert语句失败时引发。
AttributeError 当属性分配或引用失败时引发。
EOFError 当input()函数达到文件结束条件时引发。
FloatingPointError 当浮点运算失败时引发。
GeneratorExit 在close()调用生成器的方法时引发。
ImportError 未找到导入的模块时引发。
IndexError 当序列的索引超出范围时引发。
KeyError 在字典中找不到键时引发。
KeyboardInterrupt 当用户按下中断键(Ctrl+C或Delete)时引发。
MemoryError 当操作耗尽内存时引发。
NameError 当在局部或全局范围内找不到变量时引发。
NotImplementedError 由抽象方法引发。
OSError 当系统操作导致系统相关错误时引发。
OverflowError 当算术运算的结果太大而无法表示时引发。
ReferenceError 当弱引用代理用于访问垃圾收集的引用时引发。
RuntimeError 当错误不属于任何其他类别时引发。
StopIteration 由next()函数引发以指示迭代器没有其他项要返回。
SyntaxError 遇到语法错误时由解析器引发。
IndentationError 当缩进不正确时引发。
TabError 当缩进包含不一致的制表符和空格时引发。
SystemError 当解释器检测到内部错误时引发。
SystemExit 按sys.exit()功能提出。
TypeError 当函数或操作应用于不正确类型的对象时引发。
UnboundLocalError 当在函数或方法中引用局部变量时引发,但没有值绑定到该变量。
UnicodeError 当发生与 Unicode 相关的编码或解码错误时引发。
UnicodeEncodeError 在编码期间发生与 Unicode 相关的错误时引发。
UnicodeDecodeError 在解码期间发生与 Unicode 相关的错误时引发。
UnicodeTranslateError 在翻译过程中发生与 Unicode 相关的错误时引发。
ValueError 当函数获得正确类型的参数但值不正确时引发。
ZeroDivisionError 当除法或模运算的第二个操作数为零时引发。

如果需要,我们还可以在 Python 中定义我们自己的异常。要了解有关它们的更多信息,请访问Python 用户定义的异常
我们可以使用try,except和finally语句在 Python 中处理这些内置和用户定义的异常。要了解有关它们的更多信息,请访问Python try、except 和 finally statements