在本教程中,您将了解Python内置的不同类型的错误和异常。每当Python解释器遇到错误时,它们就会被引发。
在编写程序时,我们可能会犯某些错误,而在尝试运行该程序时会导致错误。python程序一旦遇到未处理的错误,即会终止。这些错误可以大致分为两类:
- 语法错误
- 逻辑错误(异常)
Python语法错误
由于未遵循语言的正确结构(语法)而导致的错误称为语法错误或解析错误。
让我们看一个例子:
>>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
如示例中所示,箭头指示解析器在哪里遇到语法错误。
我们可以在这里注意到语句中:
缺少一个冒号if
。
Python逻辑错误(异常)
在运行时(通过语法测试后)发生的错误称为异常或逻辑错误。
例如,当我们尝试打开一个不存在的文件(用于读取)FileNotFoundError
,尝试将数字除以零(ZeroDivisionError
)或尝试导入不存在的模块()时,它们就会发生ImportError
。
每当发生这些类型的运行时错误时,Python都会创建一个异常对象。如果处理不当,它将打印出对该错误的回溯以及有关该错误发生原因的一些详细信息。
让我们看一下Python如何处理这些错误:
>>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
>>> open("imaginary.txt")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
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用户定义的异常。
我们可以处理在Python这些内置的和用户定义的异常使用try
,except
和finally
语句。要了解有关它们的更多信息,请访问Python try,except和finally语句。
评论列表(1条)