Python中什么是异常,Python中有哪些异常

7.2 异常(exceptions)

在Python代码通过解释但是在执行时遇到的问题一般称为异常。程序虽然通过了解释器的解释阶段,但是在执行阶段出现了问题,如果不进行处理,那么程序很可能就无法达到我们的预期。

7.2.1 什么是异常

如前面所述,虽然Python代码通过了解释,但是在执行时仍有可能触发错误,而这类的错误就称为异常。大部分异常会导致程序无法继续执行。
一旦程序运行后发现有异常,Python会直接显示异常的信息,通常包括:异常出现的地方、异常的类型和内容。
如下:
>>> 10 * (1/0)

Traceback (most recent call last):
File “”, line 1, in
ZeroDivisionError: division by zero

>>> 4 + spam*3

Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘spam’ is not defined

>>> ‘2’ + 2

Traceback (most recent call last):
File “”, line 1, in
TypeError: can only concatenate str (not “int”) to str

我们可以看到上述示例中的异常类型依次是:ZeroDivisionError, NameError 和 TypeError。

7.2.2 常见的异常类型

在Python中类似这种的异常还有很多种,下面按照新手遇到的频率由大到小列举一下Python中最常见的几种异常类型。

7.2.2.1 类型错误(TypeError)

在程序中使用不正确或不受支持的对象类型时,会引发该错误。
异常示例TypeError

def 求平方():
    x = input('请输入:')
    print('x的平方是:')
    print(x * x)


求平方()

请输入:20
x的平方是:
Traceback (most recent call last):
File “E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\test1.py”, line 7, in
求平方()
File “E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\test1.py”, line 4, in 求平方
print(x * x)
TypeError: can’t multiply sequence by non-int of type ‘str’

异常说明
由于通过input函数获取到的结果是str类型,如果尝试运算str*str就会报类型错误了:

TypeError: can’t multiply sequence by non-int of type ‘str’

7.2.2.2 变量名错误(NameError)

变量名错误也是新手最容易遇到的错误之一。在Python变量名的命名中是有一套规则的。如果在Python的运行中找不到某个变量(在赋值之前就直接使用)就会报这个NameError。
异常示例NameError
>>> print(a)

Traceback (most recent call last):
File “E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\test1.py”, line 1, in
print(a)
NameError: name ‘a’ is not defined

异常说明
上面的代码中,没有定义a,就直接尝试用print函数输出a了。于是Python就报错:

NameError: name ‘a’ is not defined(a没有被定义) 。

7.2.2.3 索引错误(IndexError)

我们在可迭代对象章节中讲到了一些序列对象,比如列表、字符串等。这些数据类型不仅能够可迭代还有顺序,于是可以通过索引获取对象中的值。但是如果索引出现错误,就会报这个:IndexError
异常示例IndexError

lst = [9]
print(lst[1])

Traceback (most recent call last):
File “E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\test1.py”, line 2, in
print(lst[1])
IndexError: list index out of range

异常说明
这应该是编程新手最容易犯的一个错误了。在一般的编程中,序列的第一号元素的索引是0,而不是1。于是在这里我们如果尝试想获取第一个元素就应该通过索引0来获取而不是1

7.2.2.4 值错误(ValueError)

当方法接收正确数据类型但值不合适的参数时,将引发Python中的ValueError异常。
异常示例ValueError
>>> int(‘1s’)

Traceback (most recent call last):
File “E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\test1.py”, line 1, in
int(‘1s’)
ValueError: invalid literal for int() with base 10: ‘1s’

异常说明
虽然int函数可以接收str类型的数据,但是显然1s不能转换成数字,于是Python报错:
ValueError: invalid literal for int() with base 10: ‘1s’

7.2.2.5 键错误(KeyError)

在通过key索引的方式获取字典中的数据时,如果key不存在,就会触发KeyError错误。
异常示例KeyError

d = {
    
    'a': 1, 'b': 2}
print(d['c'])

Traceback (most recent call last):
File “E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\test1.py”, line 2, in
print(d[‘c’])
KeyError: ‘c’

异常说明
由于字典d中只有两个键值对,他们的key分别是a和b,不存在c,于是当我们尝试通过c索引获取到c的值时就会报KeyError。

7.2.2.6 属性错误(AttributeError)

尝试调用一个对象不存在的属性时就会报该错误。
异常示例AttributeError

class myclass:
    def __init__(self):
        self.x = 1


mc = myclass()
print(mc.y)

Traceback (most recent call last):
File “E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\test1.py”, line 7, in
print(mc.y)
AttributeError: ‘myclass’ object has no attribute ‘y’

异常说明
在定义myclass时只定义了一个x属性,没有定义y属性,调用不存在的y属性后就报错了:AttributeError: ‘myclass’ object has no attribute ‘y’

7.2.3 Python中所有自带异常类型

异常名称 描述
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零(所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python解释器不是致命的)
NameError 未声明/初始化对象(没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weakreference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python语法错误
IndentationError 缩进错误
TabError Tab和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode相关的错误
UnicodeDecodeError Unicode解码时的错误
UnicodeEncodeError Unicode编码时错误
UnicodeTranslateError Unicode转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtimebehavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

猜你喜欢

转载自blog.csdn.net/crleep/article/details/129474874
今日推荐