Python | 异常处理
本文内容:
1. 处理异常的一般方法
2. 捕获具体异常
3. 捕获具体异常的描述信息
4. 构造异常的方法
5. 嵌套异常的处理机制
6. 自定义异常
正文:
1. 处理异常的一般方法
1 try: 2 print("'haha") # 会执行,问题代码之前的内容会执行了 3 print(a) # 之前并没有定义a,肯定会出错 4 5 except: 6 print("e") 7 8 """ 9 执行后会打印: 10 'haha 11 e 12 """
当在try中打开了文件或者链接资源,在finally中关闭
1 try: 2 f = open("180.1.txt", "w") 3 f.read("hhhh") 4 # f.close() 5 6 except: 7 print("写入失败") 8 9 finally: 10 # finally中的代码总会执行,无论执行try或是执行except 11 f.close() 12 13 """ 14 执行后会打印: 15 写入失败 16 """
异常处理完整的语法格式:
try:
可能引发异常现象的代码
except:
出现异常现象后的 处理代码
else:
未出现异常现象的 处理代码(try中所有代码顺利执行后,会执行)
finally:
整个代码块结束时会执行的代码,用作 清理(无论异常出现与否,都会执行的代码)
1 try: 2 f = open("180.1.txt", "w") 3 f.read("haha") 4 5 except: 6 print("写入异常") 7 8 else: 9 print("成功写入") 10 11 finally: 12 f.close() 13 print("程序结束") 14 15 """ 16 执行程序,打印: 17 写入异常 18 程序结束 19 """
2. 捕获具体异常
1 try: 2 a = "hello python" 3 print(a) 4 print(a.index("o")) 5 print(2/0) 6 # open("w","r") 7 except NameError: 8 print("没有找到变量a") 9 10 except ValueError: 11 print("未找到被查询的内容...") 12 13 except ZeroDivisionError: 14 print("除零错误") 15 16 except Exception: 17 print("未知错误") 18 19 """ 20 执行程序,打印: 21 hello python 22 4 23 除零错误 24 """
3. 捕获具体异常的描述信息
1 try: 2 b = 2/0 3 4 except ZeroDivisionError as error: 5 print("错误:" + str(error)) # error 是个对象,要转化成字符串,才能和字符串执行 加 的操作 6 7 """ 8 执行程序,打印: 9 错误:division by zero 10 """
4. 构造异常的方法
raise 错误的类名(错误信息) 错误信息是个参数
[reɪz]
1 raise ValueError("错啦错啦") 2 3 """ 4 执行程序,打印: 5 File "/xxxxx/异常出现原理.py", line 1, in <module> 6 raise ValueError("错啦错啦") 7 ValueError: 错啦错啦 8 """
再如,除零错误就是这样构造的
1 raise ZeroDivisionError("division by zero") 2 3 """ 4 执行程序,打印: 5 File "/xxxxx/异常出现原理.py", line 1, in <module> 6 raise ZeroDivisionError("division by zero") 7 ZeroDivisionError: division by zero 8 """
5. 嵌套异常的处理机制
1 try: 2 try: 3 # print(b) # 如果先遇到本行,此try代码块中没有解决方法,则跳出,去到外层的except里。执行程序,打印:name 'b' is not defined 4 5 a = 1/0 # 如果本行写在第一行,则在本个try代码块的except就能解决问题,外层的try中的代码相当与顺利执行,不会惊动外层的except,执行程序,打印:division by zero 6 except ZeroDivisionError as error: 7 print(error) 8 9 except NameError as error: 10 print(error)
6. 自定义异常
自定义异常
class 自定义异常类名(Exception):
pass
主动触发异常现象
raise 异常类对象
1 class NameError(Exception): 2 pass 3 4 5 def check_name(name): 6 if name.find("朱") >= 0: 7 # print() 8 raise NameError("名字违规了") 9 10 11 # 调用时 12 try: 13 check_name("朱自") 14 15 except Exception as e: 16 print(str(e))