《0基础》学习Python——第十五讲
一、异常处理(try-exception-else-finally raise)
在程序运行过程中,总会遇到各种各样的错误。有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误通常称之为bug,bug是必须修复的。有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理
还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。这类错误也称为异常,在程序中通常是必须处理的,否则,程序会因为各种问题终止并退出。Python内置了一套异常处理机制,来帮助我们进行错误处理
异常处理是指在程序运行过程中出现错误或异常时,对其进行捕获、处理和恢复的一种机制。在Python中,异常处理通过使用try-except语句块来实现。
在try块中放置可能会发生异常的代码,当异常发生时,程序会跳转到对应的except块中执行特定的处理代码。except块可以捕获特定类型的异常,也可以使用通用的Exception来捕获所有类型的异常。
除了使用try-except语句外,还可以使用finally子句来定义一些一定会执行的代码,无论是否发生异常。在finally块中,通常会放置一些资源释放的操作,以确保无论程序是否发生异常,都能正确地释放资源。
异常处理还可以使用raise语句手动抛出异常,以便在程序中主动引发异常并触发相应的异常处理逻辑。
Python异常层级:
二、异常错误类型
1、SyntaxError : 语法错误,通常表示代码书写不正确。
2、ZerDivisionError :除数为0错误
3、NameError
:名称错误,表示使用了未定义的变量或函数名。
4、TypeError
:类型错误,表示变量或表达式的类型不正确。
5、IndexError
:索引错误,表示对序列类型(如列表或字符串)使用了无效的索引。
6、ValueError
:值错误,表示传递给函数的参数值不合法。
7、KeyError
:键错误,表示在字典中使用了不存在的键。
8、FileNotFoundError
:文件未找到错误,表示试图打开或不存在的文件。
9、ArributeError : 尝试访问位置对象属性错误
三、try-except用法
在Python中可通过try...except...else...finally...机制捕获异常并进行处理
例如下列简单代码
if __name__ == '__main__':lt=[1,2,5,8,6,1]try: #其下面放不确定会不会出错的代码lt[6]except Exception as e: #Exception为Python内置的异常处理的大类,如果try出错,那么执行这部分代码块内容print(e)
如上部代码,构造了一个列表,然后去索引它,但是不知道索引的对不对,就将不确定的处理方法放在try代码块下面,如果是错的,那么就运行except代码块的内容,而Exception是一个是一个Python内置的大类,便可以直接打印报错类型,而不会显示红色报错并终止程序。
即如果使用了try和except函数,那么程序出错则打印这个结果
如果没有使用try则会打印这个结果,即 索引越界
四、else和finally用法
if __name__ == '__main__':# a=10lt=[1,2,5,8,6,1]try:lt[6]except Exception as e:print(e)else:print('try 代码块没有错误')finally:print('这句话必须打出来)print("代码继续执行")
上述代码,如果try判断代码块没有异常则继续运行else内的语句,如果try出现异常,那么便会直接运行except内的代码块,但是无论try判断是否有异常,finally都会运行。
五、raise作用
raise 需要指定要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)
用户自定义异常:在Python中可以通过创建一个新的异常类来拥有自己的异常
自定义异常的原因:Python提供的内建异常不够用、可以预估某个错误的产生
定义异常类 : 异常类继承自 Exception 类,可以直接继承,或者间接继承
raise
关键字在Python中用于手动抛出异常。它的作用是使程序进入异常状态,并显示特定的错误消息。当某个错误或异常条件发生时,可以使用 raise
关键字来主动抛出异常。通过 raise
关键字,可以选择性地指定要抛出的异常类型和相关的错误信息。
其用法如下:
raise ExceptionType("error message")
ExceptionType
:表示要抛出的异常类型,可以是内置的异常类,也可以是自定义的异常类。"error message"
:表示错误消息,是一个可选的参数,用于描述异常的具体内容。
首先,我们定义一个类class Myerror(Exception):其继承Python内置的Exception类,可以定义特定类型的异常,以便在程序中抛出和处理这些异常。
class Myerror(Exception):passif __name__ == '__main__':li=[150,160,-10,-50,66]for i in li:v=100/iif v<0: #抛出异常raise Myerror('这批货有问题,终止交易')
其运行结果为:
六、SyntaxError(语法错误)
缩进错误:
关键词拼写错误:
七、六种典型异常
1、除零错误(ZeroDivisionError) : 除数为0
2、名称错误(NameError) : 变量使用前未进行申明或者初始化
3、类型错误(TypeError) : 某些函数或者方法只适用于特定的数据类型,如果 对数据类型的操作不当,就会产生类型错误
4、数值错误(ValueError) : 在输入类型正确的情况下,具体输入值错误
5、索引错误(IndexError) : 超出序列长度的索引操作
6、属性错误(AttributeError) : 方法或者属性不适用该对象