Python教程--异常处理

本文详细介绍了Python异常处理的基础,包括try-except-else-finally的使用,异常类的捕获,以及如何自定义异常类。通过实例解析了异常处理的各个部分,帮助开发者更好地理解和应对代码运行时可能出现的问题,确保程序的稳定运行。
摘要由CSDN通过智能技术生成

一、前言

在我们写代码的过程中,不管是有意无意,经常会出现代码在运行过程中出现报错的情况,这时候就会影响到我们代码的正常运行,运行过程被打断,这在实际项目中是不能够被允许的,所以我们就要用到异常,来帮助我们来规避此类的错误。

二、异常的使用

1、基本格式和操作

Python中的异常基本格式为

try:
	可能会发生异常的代码
except 异常类(可选):
	异常发生时,跳转到这里执行的代码
except 异常类(可选):
	异常发生时,跳转到这里执行的代码
else:
	没有异常发生时,执行这里的代码

我们将可能会发生错误的代码放在try中间,当出现异常时,代码不会继续执行,而是跳转到except中,执行里面的代码,我们在里面设置一些补救的措施,或者是提示信息之类的

a = [1, 2, 3]
try:
    print(a[3]) # 因为队列只有三个元素,所以在执行a[3]时会报错
    print('this is test') # 当上面语句报错时,就不会再继续执行下面的代码,也就不会打印‘this is test’
#  存在多个except时,先执行到哪个except,那么其他的except都不会再被执行
except BaseException:
    print('Error') #  当抛出符合条件的异常时,代码会直接跳转到这里,会打印‘Error’
except:
    print('Another Error') #  当抛出符合条件的异常时,代码会直接跳转到这里,会打印‘Another Error’
else:
    print('Normal') #  当没有异常时,else里面的代码会执行
结果:	Error

2、try-finally的使用

如果我们不确定哪些代码在什么时候会抛出异常,但是有些语句必须要执行的话,那我们可以使用finally,finally后面的语句,是不管try里面的代码是否会发生异常,都会去跳转执行的,我们仍然以刚才代码为例

a = [1, 2, 3]
try:
    print(a[3]) #  抛出异常
    print('this is test') # 由于上面语句异常,所以此行不会执行
except BaseException:
    print('Error') #  当抛出符合条件的异常时,代码会直接跳转到这里,会打印‘Error’
except:
    print('Another Error') #  当抛出符合条件的异常时,代码会直接跳转到这里,会打印‘Another Error’
else:
	print('Normal') #  由于抛出异常,所以不会执行此行
finally:
    print('End') #  finally中语句,不管有没有异常,都会执行

结果:	Error
		End

# 我们再来看没有异常的情况
a = [1, 2, 3]
try:
    print(a[2]) #  取值正常,不会异常
    print('this is test') #  由于上面代码正常,所以此行正常执行
except BaseException:
    print('Error')
except:
    print('Another Error')
else:
	print('Normal') #  由于没有抛出异常,所以此行会执行
finally:
    print('End') #  finally中语句,不管有没有异常,都会执行

结果:	3
		this is test
		Normal
		End

三、异常类

我们说到,在except中可以输出我们想要执行的代码,比如我们刚才打印的一个Error;但有时候我们想要追根溯源,想要知道导致异常的原因是什么,这个时候我们就可以用不同的异常类来捕获,最常用的异常类是BaseException,他基本可以抓取到所有可能的异常,他的使用方法如下:

a = [1, 2, 3]
try:
    print(a[3]) #  抛出异常
    print('this is test')
except BaseException as e:
    print(e) #  捕获到了异常,并打印出异常原因,e是我这里自定义的,大家也可以定义别的值
    print('Error')
finally:
    print('End')

结果:	list index out of range
		Error
		End

可以看到,我们可以打印出异常的原因,是由于队列超出范围导致。
当然,除了BaseException之外,我们还可以抓取一些指定的异常,比如AttributeError是对象没有这个属性错误,IOError是输入输出操作失败等等,这里不做赘述,大家有兴趣的话可以自行度娘,BaseException基本就可以覆盖大部分使用场景了,反正我是喜欢用,哈哈哈哈哈

四、自定义类

如果官方提供的异常类都无法满足你的需求的话,那我们也可以自己定义异常类

# 我们自定义一个Networkerror类,父类为RuntimeError,这个类就输出一个Networkerror字符串
class Networkerror(RuntimeError):
    def __init__(self):
        print(“Networkerror”)

try:
    raise Networkerror() #  raise是语法异常的方法,我们可以手动触发异常
except Networkerror as e:
    print(e) # 触发异常后打印Networkerror内的__init__内容
finally:
    print('End')

结果:	Networkerror

		End

五、总结

以上就是异常的基本使用了,是不是很简单,会了这些,就不怕你的代码运行运行着,飞了。。。
接下来的三章,我们给大家介绍一些对于初学者来说稍微一丢丢的高级,但又是我们经常用的部分,分别是正则表达式,socket通信以及多进程、多线程的使用,学完了这些,我相信大家已经可以应付一些初级的代码研发工作了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值