Python - 错误类型

2023-09-17 22:15:19

Python 程序中出错的最常见原因是某个语句不符合规定的用法。 此类错误称为语法错误。Python 解释器会立即报告它,通常连同原因一起报告。

示例: Error

>>> print "hello"
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("hello")?

在Python 3.x中,print是一个内置函数,需要括号。上面的语句违反了此用法,因此显示语法错误。

但很多时候,即使程序没有任何语法错误,程序在运行后也会导致错误。此类错误是运行时错误,称为异常。 Python 库中定义了许多内置异常。 让我们看看一些常见的错误类型。

下表列出了 Python 中重要的内置异常。

Exception描述
AssertionError在断言语句失败时引发。
AttributeError在属性赋值或引用上引发失败。
EOFError当 input() 函数命中文件结束条件时引发。
FloatingPointError浮点运算失败时引发。
GeneratorExit在调用生成器的 close() 方法时引发。
ImportError找不到导入的模块时引发。
IndexError当序列的索引超出范围时引发。
KeyError在字典中找不到键时引发。
KeyboardInterrupt当用户点击中断键(Ctrl+c 或删除)时引发。
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当除法或模块运算的第二个操作数为零时引发。

索引错误(IndexError)

尝试访问无效索引处的项目时会引发IndexError

示例: IndexError

>>> L1=[1,2,3]
>>> L1[3]
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
            
L1[3]
IndexError: list index out of range

ModuleNotFoundError

找不到模块时会引发ModuleNotFoundError

示例: ModuleNotFoundError

>>> import notamodule
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
            
import notamodule
ModuleNotFoundError: No module named 'notamodule'

键错误(KeyError)

找不到密钥时会引发KeyError

示例: KeyError

>>> D1={'1':"aa", '2':"bb", '3':"cc"}
>>> D1['4']
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
            
D1['4']
KeyError: '4'

导入错误(ImportError)

当找不到指定的函数时,将引发ImportError

示例: ImportError

>>> from math import cube
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
            
from math import cube
ImportError: cannot import name 'cube'

停止迭代(StopIteration)

next() 函数超出迭代器项时,将引发StopIteration

示例: StopIteration

>>> it=iter([1,2,3])
>>> next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
            
next(it)
StopIteration

类型错误(TypeError)

当操作或函数应用于不适当类型的对象时,将引发TypeError

示例: TypeError

>>> '2'+2
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
            
'2'+2
TypeError: must be str, not int

值错误(ValueError)

当函数的参数类型不合适时,将引发ValueError

示例: ValueError

>>> int('xyz')
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
            
int('xyz')
ValueError: invalid literal for int() with base 10: 'xyz'

名称错误(NameError)

当找不到对象时,将引发NameError

示例: NameError

>>> age
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
            
age
NameError: name 'age' is not defined

零除错误(ZeroDivisionError)

当除法中的第二个运算符为零时,将抛出ZeroDivisionError

示例: ZeroDivisionError

>>> x=100/0
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
            
x=100/0
ZeroDivisionError: division by zero

键盘中断(KeyboardInterrupt)

当用户在程序执行期间点击中断键(通常为 Control-C)时,将抛出KeyboardInterrupt

示例: KeyboardInterrupt

>>> name=input('enter your name')
enter your name^c
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
            
name=input('enter your name')
KeyboardInterrupt

在下一章中学习如何在 Python 中处理异常。

本文内容总结: