Python 错误和内置异常
在本教程中,您将了解 Python 内置的不同类型的错误和异常。 每当 Python 解释器遇到错误时,它们就会引发。
在编写程序时,我们可能会犯某些错误,而在尝试运行该程序时会导致错误。 python 程序一旦遇到未处理的错误,即会终止。 这些错误可以大致分为两类:
- 语法错误
- 逻辑错误(异常)
Python 语法错误
由于未遵循语言的正确结构(语法)而导致的错误称为语法错误或解析错误。
让我们看一个例子:
1 2 3 4 5 |
<span class="pl-c1">>></span><span class="pl-c1">></span> <span class="pl-k">if</span> <span class="pl-s1">a</span> <span class="pl-c1"><</span> <span class="pl-c1">3</span> <span class="pl-v">File</span> <span class="pl-s">"<interactive input>"</span>, <span class="pl-s1">line</span> <span class="pl-c1">1</span> <span class="pl-k">if</span> <span class="pl-s1">a</span> <span class="pl-c1"><</span> <span class="pl-c1">3</span> <span class="pl-c1">^</span> <span class="pl-v">SyntaxError</span>: <span class="pl-s1">invalid</span> <span class="pl-s1">syntax</span> |
如示例中所示,箭头指示解析器在哪里遇到语法错误。
在这里我们可以注意到if
语句中缺少冒号:
。
Python 逻辑错误(异常)
在运行时(通过语法测试后)发生的错误称为异常或逻辑错误。
例如,当我们尝试打开不存在的文件(用于读取)(FileNotFoundError
),尝试将数字除以零(ZeroDivisionError
)或尝试导入不存在的模块时(它们),就会发生这种情况。ImportError
)。
每当发生这些类型的运行时错误时,Python 都会创建一个异常对象。 如果处理不当,它将打印出对该错误的回溯以及有关该错误发生原因的一些详细信息。
让我们看一下 Python 如何处理这些错误:
1 2 3 4 5 6 7 8 9 10 11 |
<span class="pl-c1">>></span><span class="pl-c1">></span> <span class="pl-c1">1</span> <span class="pl-c1">/</span> <span class="pl-c1">0</span> <span class="pl-v">Traceback</span> (<span class="pl-s1">most</span> <span class="pl-s1">recent</span> <span class="pl-s1">call</span> <span class="pl-s1">last</span>): <span class="pl-v">File</span> <span class="pl-s">"<string>"</span>, <span class="pl-s1">line</span> <span class="pl-c1">301</span>, <span class="pl-s1">in</span> <span class="pl-s1">runcode</span> <span class="pl-v">File</span> <span class="pl-s">"<interactive input>"</span>, <span class="pl-s1">line</span> <span class="pl-c1">1</span>, <span class="pl-s1">in</span> <span class="pl-c1"><</span><span class="pl-s1">module</span><span class="pl-c1">></span> <span class="pl-v">ZeroDivisionError</span>: <span class="pl-s1">division</span> <span class="pl-s1">by</span> <span class="pl-s1">zero</span> <span class="pl-c1">>></span><span class="pl-c1">></span> <span class="pl-en">open</span>(<span class="pl-s">"imaginary.txt"</span>) <span class="pl-v">Traceback</span> (<span class="pl-s1">most</span> <span class="pl-s1">recent</span> <span class="pl-s1">call</span> <span class="pl-s1">last</span>): <span class="pl-v">File</span> <span class="pl-s">"<string>"</span>, <span class="pl-s1">line</span> <span class="pl-c1">301</span>, <span class="pl-s1">in</span> <span class="pl-s1">runcode</span> <span class="pl-v">File</span> <span class="pl-s">"<interactive input>"</span>, <span class="pl-s1">line</span> <span class="pl-c1">1</span>, <span class="pl-s1">in</span> <span class="pl-c1"><</span><span class="pl-s1">module</span><span class="pl-c1">></span> <span class="pl-v">FileNotFoundError</span>: [<span class="pl-v">Errno</span> <span class="pl-c1">2</span>] <span class="pl-v">No</span> <span class="pl-s1">such</span> <span class="pl-s1">file</span> <span class="pl-c1">or</span> <span class="pl-s1">directory</span>: <span class="pl-s">'imaginary.txt'</span> |
Python 内置异常

非法操作会引发异常。 当发生相应的错误时,Python 中会引发许多内置异常。 我们可以使用内置的local()
函数查看所有内置的异常,如下所示:
1 |
<span class="pl-en">print</span>(<span class="pl-en">dir</span>(<span class="pl-en">locals</span>()[<span class="pl-s">'__builtins__'</span>])) |
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
语句。