第二部分 Python提高(一)

异常机制

当程序出现异常,程序安全的退出、处理完后继续执行的机制。python中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。下面较为完整的展示了python中内建异常类的继承层次:

在这里插入图片描述

python中一切都是对象,异常也采用对象的方式来处理。处理过程:
1 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。
2 捕获异常:解释器得到该异常后,寻找相应的代码来处理该异常

解决异常问题的态度

1 学习完异常相关知识点,只是开始对异常有些认识,不意味着你会调试任何异常;
2 调试异常,需要大量的经验作为基础。因此,大家不要在此停留,继续往后学习。碰到每个异常,都要花心思去解决而不要动不动张口问人。通过自己的努力无法解决,再去找他人帮助解决。

解决每一个遇到的异常,建议大家遵循如下三点:
1 不慌张,细看信息,定位错误。看清楚报的错误信息,并定位发生错误的地方。
2 百度并查看十个相关帖子。将异常类信息进行百度,至少查看十个以上的相关帖子。
3 以上两步仍然无法解决,找老师和同学协助解决。

异常解决的关键:定位

当发生异常时,解释器会报相关的错误信息,并会在控制台打印出 相关错误信息。我们只需按照从上到下的顺序即可追溯(Trackback)错误发生的过程,最终定位引起错误的那一行代码。

try和except结构

try...一个except结构

try...except 是最常见的异常处理结构。结构如下:

try:
	被监控的可能引发异常的语句块
except BaseException [as e]:
	异常处理语句块

1 try 块包含着可能引发异常的代码, except 块则用来捕捉和处 理发生的异常。
2 执行的时候,如果try 块中没有引发异常,则跳过ecept 块继续执行后续代码;
3 执行的时候,如果try 块中发生了异常,则跳过try 块中的后续代码,跳到相应的except 块中处理异常;异常处理完后,继续执行后续代码。

示例


try:
    print("step1")
    a = 3/0
    print("step2")
except BaseException as e:
    print("step3")
    print(e)
print("step4")

输出结果

step1
step3
division by zero
step4

上述结果表明跳过了step2这个步骤,直接处理异常。

try…多个except结构

上面的结构可以捕获所有的异常,工作中也很常见。但是,从经典理论考虑,一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免遗漏可能出现的异常,可以在最后增加BaseException 。结构如下:

try:
	被监控的、可能引发异常的语句块
except Exception1:
	处理Exception1的语句块
except Exception2:
	处理Exception2的语句块
[...]
except BaseException:
	处理可能遗漏的异常的语句块

示例

try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a)/float(b)
    print(c)
except ZeroDivisionError:
    print("异常:除数不能为0")
except TypeError:
    print("异常:除数和被除数都应该为数值类型")
except BaseException as e:
    print(e)
    print(type(e))

请输入被除数:AA
请输入除数:0
could not convert string to float: ‘AA’
<class ‘ValueError’>

try…except…else结构

try...except...else 结构增加了else块。如果try 块中没有抛出异常,则执行else 块。如果try 块中抛出异常,则执行except 块,不执行else 块。
示例

try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a)/float(b)
except BaseException as e:
    print(e)
else:
    print("除的结果是:",c)

结果1

请输入被除数:1
请输入除数:0
float division by zero

结果2

请输入被除数:2
请输入除数:1
除的结果是: 2.0

try…except…finally结构

try...except...finally 结构中, finally 块无论是否发生异常都会被执行;通常用来释放try 块中申请的资源

示例

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c = float(a)/float(b)
except BaseException as e:
    print(e)
else:
    print(c)
finally:
    print("我是finally中的语句,无论发生异常与否,都执行!")
    
print("程序结束!")

请输入一个被除数:1
请输入一个除数:0
float division by zero
我是finally中的语句,无论发生异常与否,都执行!
程序结束!

  • 32
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_44006060

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

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

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

打赏作者

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

抵扣说明:

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

余额充值