关于异常捕获

4.2 异常捕获
-
什么是异常??
代码运行出错,会导致异常,异常发生后,如果没有解决方法,则会导致整个程序结束。 -
异常的三个重要组成部分:
- 异常的追踪信息traceback
翻到错误的最下面,从下往上第一个蓝色字体鼠标左键点击,即可跳转到错误代码所在行。 - 异常的类型
xxxxError - 异常的原因
异常的类型冒号后面的内容。
错误的详细原因很重要。
看完之后可能找到解决的方法。
- 异常的追踪信息traceback
-
错误的种类
- 语法错误
不被允许的,出现了就立刻修改!! - 逻辑错误
可以被允许,出现之后尽快修改即可
修改逻辑错误的过程,其实就是在从头到尾清理思路的过程。
NameError
IndexError
KeyError
ValueError
...等等
- 语法错误

- 捕获异常的基本语法结构
try:
有可能出现错误的代码
except 错误类型 as e:
出错之后对应的处理机制(e是错误的详细信息)
except 错误类型 as e:
出错之后对应的处理机制
except 错误类型 as e:
出错之后对应的处理机制
try:
print(name)
except NameError as e:
print('变量名不存在', e)
# as e 可加可不加,看自己需求。
# 变量名不存在 name 'name' is not defined
# 在我们不知道可能出现的错误类型的时候
# 有万能异常
try:
int('abc')
except Exception: # BaseException
print('啥错都能解决。。。')
"""
异常捕获句式和万能异常
1.有可能会出现错误的代码才需要被监测
2.被监测的代码一定要越少越好
3.异常捕获使用频率越低越好
爬虫程序中会经常用到。
"""
# 下面我们来解决上面的问题
l1 = [1,2,3,4,5,6,7,8,9,10,11,22,33,44,55,66]
# 循环打印出列表中每个元素,但是不能使用for循环
# 1.先将列表转为迭代器对象
res = l1.__iter__()
while True:
try:
print(next(res))
except StopIteration:
print('打印完毕')
break
-
异常捕获补充
else & finally用法try: l = [] l[10] except NameError as e: print('名字错误') except KeyError as e: print('键错误') except IndexError as e: print('索引错误') else: print('当被监测代码没报错,正常运行结束之后会走这里') finally: print('无论被监测代码报错与否,最终都要走这里') try: 被监测代码 except 错误类型 as e: ... ... else: 被监测代码不报错的时候执行 finally: 无论是否报错最终都会执行这里断言语句(用的很少,了解一下)
name = 'jason' assert isinstance((name), int) # AssertionError主动报异常
# 在监测机制中用到 raise NameError
浙公网安备 33010602011771号