异常
程序执行过程中出现导致程序终止的错误叫做异常
捕获一个异常
表现形式:
try:
可能出现异常的代码
except 异常的名字:
遇到异常时的处理方式
示例:
1 try: 2 print(aaaaaa) 3 except NameError: 4 print("---已知晓异常---") 5 print("Hello World"
运行结果:
---已知晓异常---
Hello World
说明:
1、单独执行print(aaaaaa)时异常名字是NameError
2、不使用异常处理时上面程序会报错并结束,不会输出Hello World,使用异常处理时可正常打印Hello World
3、except后的异常名字必须与执行代码时产生的真实异常名字一致
4、如try中的代码没有异常则正常执行try中代码,不执行except中的代码
捕获多个异常
try:
可能出现异常的代码块
except (异常的名字1,异常的名字2):
遇到异常时的处理方式
示例:
1 try: 2 print(aaaaaa) 3 print(3/0) 4 except (NameError,ZeroDivisionError): 5 print("---已知晓异常---") 6 print("Hello World")
运行结果:
---已知晓异常---
Hello World
说明:
1、3/0产生的异常名字为ZeroDivisionError
2、except后的异常名字必须与执行代码时产生的真实异常名字一致
捕获所有异常
try:
可能出现异常的代码块
except Exception:
遇到异常时的处理方式
示例:
1 try: 2 print(aaaaaa) 3 print(3/0) 4 except Exception: 5 print("---已知晓所有异常---") 6 print("Hello World")
运行结果:
---已知晓所有异常---
Hello World
捕获异常时获取异常的描述信息
产生异常时除了需要处理异常之外有时还需知道产生异常的原因
表现形式:
try:
可能出现异常的代码块
except Exception as 变量名:
遇到异常时的处理方式
打印变量
示例:
1 try: 2 print(aaaaaa) 3 except Exception as a: 4 print("---已知晓异常---") 5 print(a) 6 print("Hello World")
运行结果:
---已知晓异常--- name 'aaaaaa' is not defined Hello World
异常处理中使用else
含义:
如果没有捕获到异常,则执行else中的代码块
表现形式:
try:
可能出现异常的代码块
except Exception:
遇到异常时的处理方式
else:
没捕获到异常时执行的代码块
示例:
1 try: 2 print("abcdefg") 3 except Exception: 4 print("---已知晓异常---") 5 else: 6 print("程序无异常") 7 print("Hello World")
运行结果:
abcdefg
程序无异常
Hello World
异常处理中使用finally
含义:
无论是否捕获到异常,最后都需执行finally中的代码块
表现形式:
try:
可能出现异常的代码块
except Exception:
遇到异常时的处理方式
else:
没捕获到异常时执行的代码块
finally:
最后一定会执行的代码块
示例:
1 try: 2 f = open("test.txt","r") 3 except Exception: 4 print("---已知晓异常---") 5 else: 6 print("程序无异常") 7 finally: 8 f.close() 9 print("Hello World")
运行结果:
---已知晓异常--- Traceback (most recent call last): File "F:/untitled/Python_jichu/异常.py", line 8, in <module> f.close() NameError: name 'f' is not defined
说明:
因为不存在test.txt文件,所以f.close()会报错退出