本文内容:
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))