零基础 学 python开发 (Genius套餐A)十一

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/89963837

夜光序言:

 

我于昨晚去世,走时心如止水。

我于今早重生,来时心怀暖阳。

 

正文:

3.5 函数与异常
 
3.5.1 目标 


程序中这里可能发生异常那里也可能发生异常,那么是不是有可能发生异常的地方都使用 try 异常处理语句进行异常扑捉呢?如果这样的化程序太复杂,实际上异常有传递机制,就是一个地方发生的异常如果没有被扑捉处理的话,它可以一层层传递,一直到被扑捉为止。

目标就是掌握异常的这种传递机制,编写合理的处理程序。



3.5.2 异常处理 


在 Python 中如果一个函数抛出一个异常,那么在调用函数的地方可以捕捉到这个异常。


例 3-5-1: 函数的异常扑捉 

def fun():
 print("start")
 n=1/0
 print("end")
try:
 fun()
except Exception as err:
 print(err)


 
执行该程序结果:
start
division by zero

由此可见 fun 函数中出现的异常在主程序调用 fun 时可以捕捉到,Python 程序一个地方出现异常,那么异常会传递到上一级调用的地方,这个过程会一直传递下去,直到异常被扑捉到为止,如果整个过程都没有遇到扑捉语句,程序就会因异常而结束。因此如果在 fun 中已经捕捉了异常,那么调用的主程序位置就捕捉不到了。


例 3-5-2: 函数的异常扑捉 

def fun():
 print("start")
 try:
 n=1/0
 print("end")
 except:
 print("error")
try:
 fun()
except Exception as err:
 print(err)


 
程序执行结果:
start
error



例 3-5-3:异常的传递 

def A():
 print("start A")
 n=1/0
 print("end A")
def B():
 print("start B")
 A()
 print("end B")
try:
 B()
 print("done")
except Exception as err:
 print(err)
print("finish")


 
程序执行结果:
start B
start A
division by zero
finish
由此可见函数 A 中出现的异常自己没有捕捉,在调用函数 B 中也没有捕捉,最后在主程序中被捕捉到,即异常有传递性,在一个函数中没有被捕捉的异常会传递给调用这个函数的另外函数,这个过程会一直传递下去,直到异常被捕捉为止,就不再往后传递了。


例 3-5-4:异常的传递 


 

def A():
 print("start A")
 n=1/0
 print("end A")
def B():
 print("start B")
 try:
 A()
 except Exception as err:
 print(err)
 print("end B")
try:
 B()
 print("done")
except Exception as err:
 print(err)
print("finish")


程序结果:
start B
start A
division by zero
end B
done
finish


 如果出现的异常一直没有被捕获,那么就传递到系统,程序就会终止。



例 3-5-5:异常终止程序 

def A():
 print("start A")
 n=1/0
 print("end A")
def B():
 print("start B")
 A()
 print("end B")
B()
print("finish")




执行结果:


start B
Traceback (most recent call last):
start A
 File "C:/untitled/mmm.py", line 13, in <module>
 B()
 File "C:/untitled/mmm.py", line 9, in B
 A()
 File "C:/untitled/mmm.py", line 3, in A
 n = 1 / 0
ZeroDivisionError: division by zero



3.5.3 【案例】时间的输入与显示 


1、案例描述 
输入一个有效的时间,并显示该时间。


2、案例分析 
设置时间格式为 h:m:s,输入时保证输入且 h、m、s 的值有效,不然就抛出异常。


3、案例代码 
 

def myTime():
 h=input("时:")
 h=int(h)
 if h<0 or h>23:
 raise Exception("无效的时")
 m=input("分:")
 m=int(m)
 if m<0 or m>59:
 raise Exception("无效的分")
 s=input("秒:")
 s=int(s)
 if s<0 or s>59:
 raise Exception("无效的秒")
 print("%02d:%02d:%02d" %(h,m,s))
try:
 myTime()
except Exception as e:
 print(e)


执行时如果时间输入正确,就显示该时间,例如:
时:23
分:12
秒:34
23:12:34
但是如果输入的时间不对,就抛出异常,例如:
时:24
无效的时

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/89963837