Skip to content

Commit 6a517b3

Browse files
committed
docs: 📝 异常
一. 了解异常 二. 异常的写法 2.1 语法 2.2 快速体验 2.3 捕获指定异常 2.3.1 语法 2.3.2 体验 2.3.3 捕获多个指定异常 2.3.4 捕获异常描述信息 2.3.5 捕获所有异常 2.4 异常的else 2.5 异常的finally 三. 异常的传递 四. 自定义异常 五. 总结
1 parent 1752b23 commit 6a517b3

File tree

1 file changed

+247
-0
lines changed

1 file changed

+247
-0
lines changed

doc/01-异常.md

+247
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
- [一. 了解异常](#一-了解异常)
2+
- [二. 异常的写法](#二-异常的写法)
3+
- [2.1 语法](#21-语法)
4+
- [2.2 快速体验](#22-快速体验)
5+
- [2.3 捕获指定异常](#23-捕获指定异常)
6+
- [2.3.1 语法](#231-语法)
7+
- [2.3.2 体验](#232-体验)
8+
- [2.3.3 捕获多个指定异常](#233-捕获多个指定异常)
9+
- [2.3.4 捕获异常描述信息](#234-捕获异常描述信息)
10+
- [2.3.5 捕获所有异常](#235-捕获所有异常)
11+
- [2.4 异常的else](#24-异常的else)
12+
- [2.5 异常的finally](#25-异常的finally)
13+
- [三. 异常的传递](#三-异常的传递)
14+
- [四. 自定义异常](#四-自定义异常)
15+
- [五. 总结](#五-总结)
16+
17+
18+
# 一. 了解异常
19+
20+
当检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。
21+
22+
例如:以`r`方式打开一个不存在的文件。
23+
24+
``` python
25+
open('test.txt', 'r')
26+
```
27+
28+
29+
# 二. 异常的写法
30+
31+
## 2.1 语法
32+
33+
``` python
34+
try:
35+
可能发生错误的代码
36+
except:
37+
如果出现异常执行的代码
38+
```
39+
40+
## 2.2 快速体验
41+
42+
需求:尝试以`r`模式打开文件,如果文件不存在,则以`w`方式打开。
43+
44+
``` python
45+
try:
46+
f = open('test.txt', 'r')
47+
except:
48+
f = open('test.txt', 'w')
49+
```
50+
51+
## 2.3 捕获指定异常
52+
53+
### 2.3.1 语法
54+
55+
``` python
56+
try:
57+
可能发生错误的代码
58+
except 异常类型:
59+
如果捕获到该异常类型执行的代码
60+
```
61+
62+
### 2.3.2 体验
63+
64+
``` python
65+
try:
66+
print(num)
67+
except NameError:
68+
print('有错误')
69+
```
70+
71+
> 注意:
72+
>
73+
> 1. 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
74+
> 2. 一般try下方只放一行尝试执行的代码。
75+
76+
### 2.3.3 捕获多个指定异常
77+
78+
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。
79+
80+
``` python
81+
try:
82+
print(1/0)
83+
84+
except (NameError, ZeroDivisionError):
85+
print('有错误')
86+
```
87+
88+
### 2.3.4 捕获异常描述信息
89+
90+
``` python
91+
try:
92+
print(num)
93+
except (NameError, ZeroDivisionError) as result:
94+
print(result)
95+
```
96+
97+
### 2.3.5 捕获所有异常
98+
99+
Exception是所有程序异常类的父类。
100+
101+
``` python
102+
try:
103+
print(num)
104+
except Exception as result:
105+
print(result)
106+
```
107+
108+
109+
110+
## 2.4 异常的else
111+
112+
else表示的是如果没有异常要执行的代码。
113+
114+
``` python
115+
try:
116+
print(1)
117+
except Exception as result:
118+
print(result)
119+
else:
120+
print('我是else,是没有异常的时候执行的代码')
121+
```
122+
123+
## 2.5 异常的finally
124+
125+
finally表示的是无论是否异常都要执行的代码,例如关闭文件。
126+
127+
``` python
128+
try:
129+
f = open('test.txt', 'r')
130+
except Exception as result:
131+
f = open('test.txt', 'w')
132+
else:
133+
print('没有异常,真开心')
134+
finally:
135+
f.close()
136+
```
137+
138+
# 三. 异常的传递
139+
140+
体验异常传递
141+
142+
需求:
143+
144+
​ 1. 尝试只读方式打开test.txt文件,如果文件存在则读取文件内容,文件不存在则提示用户即可。
145+
146+
​ 2. 读取内容要求:尝试循环读取内容,读取过程中如果检测到用户意外终止程序,则`except`捕获异常并提示用户。
147+
148+
``` python
149+
import time
150+
try:
151+
f = open('test.txt')
152+
try:
153+
while True:
154+
content = f.readline()
155+
if len(content) == 0:
156+
break
157+
time.sleep(2)
158+
print(content)
159+
except:
160+
# 如果在读取文件的过程中,产生了异常,那么就会捕获到
161+
# 比如 按下了 ctrl+c
162+
print('意外终止了读取数据')
163+
finally:
164+
f.close()
165+
print('关闭文件')
166+
except:
167+
print("没有这个文件")
168+
```
169+
170+
# 四. 自定义异常
171+
172+
在Python中,抛出自定义异常的语法为` raise 异常类对象`
173+
174+
需求:密码长度不足,则报异常(用户输入密码,如果输入的长度不足3位,则报错,即抛出自定义异常,并捕获该异常)。
175+
176+
``` python
177+
# 自定义异常类,继承Exception
178+
class ShortInputError(Exception):
179+
def __init__(self, length, min_len):
180+
self.length = length
181+
self.min_len = min_len
182+
183+
# 设置抛出异常的描述信息
184+
def __str__(self):
185+
return f'你输入的长度是{self.length}, 不能少于{self.min_len}个字符'
186+
187+
188+
def main():
189+
try:
190+
con = input('请输入密码:')
191+
if len(con) < 3:
192+
raise ShortInputError(len(con), 3)
193+
except Exception as result:
194+
print(result)
195+
else:
196+
print('密码已经输入完成')
197+
198+
199+
main()
200+
```
201+
202+
203+
204+
# 五. 总结
205+
206+
- 异常语法
207+
208+
``` python
209+
try:
210+
可能发生异常的代码
211+
except:
212+
如果出现异常执行的代码
213+
else:
214+
没有异常执行的代码
215+
finally:
216+
无论是否异常都要执行的代码
217+
```
218+
219+
- 捕获异常
220+
221+
``` python
222+
except 异常类型:
223+
代码
224+
225+
except 异常类型 as xx:
226+
代码
227+
```
228+
229+
- 自定义异常
230+
231+
``` python
232+
# 1. 自定义异常类
233+
class 异常类类名(Exception):
234+
代码
235+
236+
# 设置抛出异常的描述信息
237+
def __str__(self):
238+
return ...
239+
240+
241+
# 2. 抛出异常
242+
raise 异常类名()
243+
244+
# 捕获异常
245+
except Exception...
246+
```
247+

0 commit comments

Comments
 (0)