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尚未实现的方法
SyntaxErrorPython语法错误
IndentationError缩进错误
TabErrorTab和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode相关的错误
UnicodeDecodeErrorUnicode解码时的错误
UnicodeEncodeErrorUnicode编码时错误
UnicodeTranslateErrorUnicode转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtimebehavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0思必得0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值