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 中处理异常。
本文内容总结: