我们在编写程序时可能会犯一些错误,从而在我们尝试运行它时出现错误。一旦遇到未处理的错误,python 程序就会终止。这些错误可以大致分为两类:
- 语法错误
- 逻辑错误(异常)
Python 语法错误
由于不遵循语言的正确结构(语法)而导致的错误称为语法错误或解析错误。
让我们看一个例子:
>>> if a < 3 File “
如示例中所示,箭头指示解析器在何处遇到语法错误。
我们可以在这里注意到语句中:缺少一个冒号if。
Python 逻辑错误(异常)
运行时(通过语法测试后)发生的错误称为异常或逻辑错误。
例如,当我们尝试打开一个不存在的文件(用于读取)(FileNotFoundError),尝试将一个数字除以零(ZeroDivisionError),或尝试导入一个不存在的模块()时,就会发生这种情况ImportError。
每当发生这些类型的运行时错误时,Python 都会创建一个异常对象。如果处理不当,它会打印该错误的回溯以及有关该错误发生原因的一些详细信息。
让我们看看 Python 是如何处理这些错误的:
>>> 1 / 0 Traceback (most recent call last): File “
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。