2018-10-08 Python21 异常、time模块
2018-10-08 本文已影响0人
孟媛的笔记
异常处理-基本功能:
Python3用元祖接收多个异常,Python2不用写圆括号。
Python3用基类捕获所有异常,Python2不用写异常名即捕获所有异常。
Exception是异常的基类。
1 import time
2
3 try:
4 time.sleep(2)
5 11/0
6 open("111.txt", "r")
7 #print(num)
8 print("上一句出错,这一句是不会打印的。")
9 except (FileNotFoundError,NameError):
10 print("你出错了。")
11 except Exception as e: #Exception是异常的基类
12 print("如果上面的异常类型不足以捕获异常,那么就会被我捕获。")
13 print(e)
14 if str(e).find("division") != -1:
15 print("-----------重新抛出,异常信息如下:-----------")
16 raise #手动抛出异常
17
18 else:
19 print("没有异常才会执行。")
20 finally:
21 print("不管上面的代码有没有产生异常,我都会执行。如果重新抛出异常:那么会先
执行我,才会打印抛出的异常堆栈信息,然后程序终止。")
22
23
24 print("如果前面不抛异常,或者异常被捕获了,我就会打印的。")
运行:
如果上面的异常类型不足以捕获异常,那么就会被我捕获。
division by zero
-----------重新抛出,异常信息如下:-----------
不管上面的代码有没有产生异常,我都会执行。如果重新抛出异常:那么会先执行我,再打印抛出的异常堆栈信息,再终止程序。
Traceback (most recent call last):
File "20except.py", line 5, in <module>
11/0
ZeroDivisionError: division by zero
抛出自定义异常:
1 class CustomException(Exception): #自定义异常
2 def __init__(self, actual, expect):
3 self.actual = actual
4 self.expect = expect
5
6 def __str__(self):
7 str = "--------------------------------------\n"
8 str += "自定义异常: \n"
9 str += "\t\t期望值 %s, 实际值 %s"%(self.expect, self.actual)
10 str += "\n--------------------------------------"
11 return str
12
13
14
15 def main():
16 try:
17 act = input("请输入实际值:")
18 exp = "5"
19 if act != exp:
20 raise CustomException(act,exp)
21 except CustomException as e:
22 print(e)
23 else:
24 print("期望值%s = 实际值%s"%(exp, act))
25
26
27
28
29 #程序开始
30 main()
运行:
mm@mm-virtual-machine:~/桌面$ python3 CustomException.py
请输入实际值:5
期望值5 = 实际值5
mm@mm-virtual-machine:~/桌面$ python3 CustomException.py
请输入实际值:3
--------------------------------------
自定义异常:
期望值 5, 实际值 3
--------------------------------------