python异常

python异常

一般异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
IndexError
l=['a','b']
l[100]

KeyError
d={'a':1}
d['b']

AttributeError: # 属性错误
class Foo:
pass

Foo.x
import os
os.aaa


ZeroDivisionError # 除零错误
1 / 0


FileNotFoundError
f=open('a.txt','r',encoding='utf-8')

ValueError: I/O operation on closed file.
f=open('a.txt','r',encoding='utf-8')
f.close()
f.readline()

ValueError: invalid literal for int() with base 10: 'aaaaa'
int('aaaaa')


TypeError # 类型错误
for i in 333: # 333是不可迭代错误
pass

NameError # 定义错误
x
func()




def func():
import os
os.xxxx

func()

捕获处理异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
语法:

单分支
try:
print('start.....')
x=1
y
l=[]
l[3]
d={'a':1}
d['b']
print('end....')
except NameError:
print('变量名没有定义')


print('other.....')



多分支
try:
print('start.....')
x=1
# y
l=[]
l[3]
d={'a':1}
d['b']
print('end....')
except NameError:
print('变量名没有定义')
except KeyError:
print('字典的key不存在')
except IndexError:
print('索引超出列表的范围')


print('other.....')




多种异常采用同一段逻辑处理
try:
print('start.....')
x=1
# y
l=[]
# l[3]
d={'a':1}
d['b']
print('end....')
except (NameError,KeyError,IndexError):
print('变量名或者字典的key或者列表的索引有问题')


print('other.....')


万能异常
try:
print('start.....')
x=1
# y
l=[]
# l[3]
d={'a':1}
# d['b']
import os
os.aaa
print('end....')
except Exception:
print('万能异常---》')


print('other.....')



获取异常的值
try:
print('start.....')
x=1
y
l=[]
l[3]
d={'a':1}
d['b']
import os
os.aaa
print('end....')
except Exception as e:
print('万能异常---》',e)


print('other.....')




try:
print('start.....')
x=1
# y
l=[]
l[3]
d={'a':1}
d['b']
import os
os.aaa
print('end....')
except NameError as e:
print('NameError: ',e)

except KeyError as e:
print('KeyError: ',e)

except Exception as e:
print('万能异常---》',e)


print('other.....')



try....else...
else: 不能单独使用,必须与except连用,意思是:else的子代码块会在被检测的代码没有出现过任何异常的情况下执行

try:
print('start.....')
# x=1
# # y
# l=[]
# l[3]
# d={'a':1}
# d['b']
# import os
# os.aaa
print('end....')
except NameError as e:
print('NameError: ',e)

except KeyError as e:
print('KeyError: ',e)

except Exception as e:
print('万能异常---》',e)

else:
print('在被检测的代码块没有出现任何异常的情况下执行')
print('other.....')


try...finally....
try:
print('start.....')
# x=1
# # y
# l=[]
# l[3]
# d={'a':1}
# d['b']
# import os
# os.aaa
print('end....')
except NameError as e:
print('NameError: ',e)

except KeyError as e:
print('KeyError: ',e)

except Exception as e:
print('万能异常---》',e)

else:
print('在被检测的代码块没有出现任何异常的情况下执行')
finally:
print('无论有没有异常发生,都会执行')
print('other.....')




finally的子代码块中通常放回收系统资源的代码
try:
f=open('a.txt',mode='w',encoding='utf-8')
f.readline()

finally:
f.close()

print('other....')

主动触发异常

1
2
3
4
5
6
7
8
9
10
raise TypeError('类型错误')

class People:
def __init__(self,name):
if not isinstance(name,str):
raise TypeError('%s 必须是str类型' %name)

self.name=name

p=People(123)

断言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print('part1........')
# stus=['egon','alex','wxx','lxx']
stus=[]


# if len(stus) <= 0:
# raise TypeError
assert len(stus) > 0

print('part2.........')
print('part2.........')
print('part2.........')
print('part2.........')
print('part2.........')
print('part2.........')

自定义异常

1
2
3
4
5
6
7
8
9
10
class RegisterError(BaseException):
def __init__(self,msg,user):
self.msg=msg
self.user=user

# def __str__(self):
# 在对象被打印时,自动触发,应该在该方法内采集与对象self有关的信息,然后拼成字符串返回
# return '<%s:%s>' %(self.user,self.msg)

raise RegisterError('注册失败','teacher')
1
2
3
4
5
6
7
8
9
10
11
age=input('>>: ').strip() #age='aaa'

if age.isdigit():
age=int(age)

if age > 10:
print('too big')
elif age < 10:
print('too small')
else:
print('you got it')
李江洋 wechat
添加微信,实地看房
欢迎联系我,带您实地看房