概念
异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的。
异常处理的特征
1,追踪信息
2,类型
3,内容
处理异常的原因
1,提高程序的稳定性,即便程序运行时报错,也不终止程序,比如爬取数据的时候,要爬取500页的内容,我们当然不希望在爬取第200页的时候因为页面缺少了什么信息而导致整个爬虫过程重新来过,简单来说,就是爬虫中常用的防错机制
2,另一种需求就是将出错信息记录到日志内,便于程序的调整
对异常的处理方法
对于语法上的错误
比如SyntaxError,在程序运行前检查发现并改正即可
对于逻辑上的错误
错误发生的情况是可以预知的,那么就用if解决
for letter in 'python':
if letter == 'h':
continue#注意,这里跳过了字符h
print(letter,end=',')
效果
错误发生的情况无法预知的时候,那么就用try-except解决
用法一
try:
#可能抛出异常的代码
代码模块1
代码模块2
代码模块3
except 异常类型1 as e:
pass
except 异常类型2 as e:
pass
使用范例
datalst = []
for u in urllst[:10]:
#建立防错机制
try:
datalst.append(get_data(u))
print('数据采集成功,总共采集%i条数据' % len(datalst))
except:
errorlst.append(u)
print('数据采集失败,数据网址为:',u)
用法二
try:
print('测试test测试test')
l=['aaaAAAAAAAAAAAAAAAAAAAAbbbb']
#抛出异常IndexError,该行代码同级别的后续代码不会运行
print('5555555555555555555555')
XXCCQ
print('5555555555555555555555')
dic={'A':8}
dic['A']
except IndexError as e:
print('异常信息: ',e)
except NameError as e:
print('异常信息: ',e)
效果
用法三
try:
print('异常范例测试A')
l = ['码农', '大码农']
l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
print('异常范例测试B')
xxx
print('异常范例测试C')
dic = {'超级码农': 1}
dic['超级超级码农']
except Exception as e: # 相对于方法二而言,对异常做了个整合
print('可以匹配所有异常')
效果
用法四
#else不能单独与try配套使用,必须搭配except
try:
print('异常范例测试A')
print('异常范例测试B')
print('异常范例测试C')
except Exception as e: # 整合异常
print('可以匹配所有异常')
else:
print('===='*20)
效果