异常简介
1.如何理解异常
异常就是bug,程序运行中如果出现,会导致整个程序的结束
2.异常的结构
Traceback (most recent call last):
File "D:/pythonProject/day21/02 异常的结构.py", line 13, in <module>
name
NameError: name 'name' is not defined
2.1.关键字line:提示报错所在的行数
2.2.最后一行冒号左侧:提示报错类型
2.3.最后一行冒号右侧:错误的具体原因
3.异常的分类
3.1.语法错误:(SyntaxError)
绝不允许出现,一旦出现请立即修改
3.2.逻辑错误:(NameError,IndexError,KeyError,TypeError等)
允许出现,出错之后改正即可
异常捕获
1.异常捕获就相当于是提前预测代码可能出现的问题,并给出应急处理措施(打预防针).异常捕获能少用就少用。
2.一般是当我们不确定代码是否报错的情况下,需要自己写代码处理异常。
3.代码实现
3.1基本的语法结构:
try:
可能会出错的代码(被try监控)
except 错误类型1 as e:
对应错误类型1的处理措施
except 错误类型2 as e:
对应错误类型2的处理措施
例如:
"""
try:
name
except NameError as e:
print('123')
"""
3.2.万能异常
上面的处理方式需要我们提前预判出可能出现的错误类型,但有时候我们也不知道会报什么错,以下就是更为笼统的通用解决方式:
try:
可能会出错的代码(被try监控)
except Exception as e:
对应错误的处理措施
4.捕获异常的其他操作补充
4.1. else与finally
try:
可能会出错的代码(被try监控)
except Exception as e:
对应错误的处理措施
else:
检测的代码没有出错的情况下,执行else后的代码
finally:
无论被检测代码报不报错,都会执行finally代码
4.2. 断言(assert)
name = 'jason'
assert isinstance(name, str)
print('jason is here')
4.3. 主动抛出异常(raise)
name = input('username>>>:').strip()
if name == 'jason':
raise Exception('反正就是不能过')
else:
print('不是jason 那没事了')
异常实操
l1 = [1,2,3,4,5,6]
l1 = l1.__iter__()
while True:
try:
print(l1.__next__())
except Exception as e:
break
for循环的本质:
语法结构
for 变量名 in 可迭代对象:
for循环体代码
1.for会自动将in后面的数据调用__iter__()变成迭代器对象
2.之后每次循环调用__next__()取值
3.最后没有值__next__()会报错 for能够自动处理该错误 让循环正常结束