拜师——python基础入门—第九大节课—异常的本质_调试核心理念——day41

第125课时: 异常的本质_调试核心理念


导引问题 :

在实际工作中,我们遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求;你的程序要打开某个文件,这个文件可能不存在或者文件格式不对;你要读取数据库的数据,数据可能是空的;我们的程序再运行着,但是内存或硬盘可能满了等等。

【伪代码,示例,】

使用if处理程序中可能出现的各种状况。

将d:/a.txt拷贝到e:盘内


if "d:/a.txt"这个文件存在:
	 if e 盘的空间大于 a.txt 文件长度: 
		 if 文件复制一半 IO 流断掉: 
		 停止 copy,输出:IO 流出问题!
	else:
	 copyFile("d:/a.txt","e:/a.txt")
else: 
print("e 盘空间不够存放 a.txt!")

这种方式,有两个坏处:

  1. 逻辑代码和错误处理代码放一起!

  2. 程序员本身需要考虑的例外情况较复杂,对程序员本身要求较高!

python 的异常机制给我们提供了方便的处理方式。如上情况,如果是用 python的异常机制来处理,示意代码如下

#将d:/a.txt拷贝到e:盘

try:
	copyFile("d:/a.txt","e:/a.txt")
except:
	print("文件无法拷贝")

用try,试一试,先看看能不能运行,不能直接报错。

异常机制本质

异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。

所谓异常处理,就是指程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止整个程序的执行。

python中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中 包含了该类异常的信息和对异常进行处理的方法。

python中内建异常类的继承层次:
在这里插入图片描述



例子:3/0报错:

a = 3/0

出现异常:

Traceback (most recent call last):
File “D:/PycharmProjects/MyTest/test2.py”, line 10, in

a= 3/0
ZeroDivisionError: division by zero

Python中一切都是对象,异常也采用对象的方式来处理:

处理过程:

1 抛出异常

在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。

2. 捕获异常:

解释器得到该异常后,寻找相应的代码来处理该异常。


解决异常问题的态度

解决每一个遇到的异常,建议大家遵循如下三点:

  1. 不慌张,细看信息,定位错误。看清楚报的错误信息,并定位发生错误的地方。

  2. 百度并查看十个相关帖子。将异常类信息进行百度,至少查看十个以上的相关帖子。

  3. 以上两步仍然无法解决,找老师和同学协助解决。

不要轻易问老师。
在这里插入图片描述

把自己的错误代码拿去百度,看解决方法。

把:ZeroDivisionError: division by zero
这句话在百度搜索

在这里插入图片描述

可以看到许多教程来帮助解决。

例子2:

def a():
    num = 1/0
def b():
    a()
def c():
    b()
c()

Traceback (most recent call last):
File “D:/PycharmProjects/MyTest/test2.py”, line 19, in

c()
File “D:/PycharmProjects/MyTest/test2.py”, line 17, in c
b()
File “D:/PycharmProjects/MyTest/test2.py”, line 14, in b
a()
File “D:/PycharmProjects/MyTest/test2.py”, line 11, in a
num = 1/0
ZeroDivisionError: division by zero

看到有那么多错,单其实只有一个错,这些错都来源于一个问题,其他都是调用引用出错。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值