目录
1.主动记录Try except日志
在解析过程中,为了保证程序的运行,我们必须try except起来,防止因为个别页面解析错误导致程序奔溃。并做好日志记录,用来追查采集遗漏的原因。
日志记录:①时间、②原因、③出错文件、④出错行
示例如下:
try:
1 / 0
except Exception as e:
with open('error_log.txt', 'a', encoding='utf8') as f:
f.writelines(str(datetime.datetime.now())+'\n')
f.writelines(f'error reason: {e}'+'\n')
f.writelines(f'error file : {e.__traceback__.tb_frame.f_globals["__file__"]}'+'\n')
f.writelines(f"error line : {e.__traceback__.tb_lineno}"+'\n')
f.writelines('\n')
2.开启运行日志
系统默认的日志级别是DEBUG,并打印在控制台。日志级别如下:
- CRITICAL:严重错误
- ERROR:一般错误
- WARNING:警告
- INFO: 一般信息
- DEBUG:调试信息
设置日志等级,并记录日志。修改settings.py,加入两项配置:
LOG_LEVEL = 'DEBUG'
LOG_FILE = 'log.txt'
3.异常栈 traceback 模块
上述两种方式有一个弊端,假设我们的主代码中有一个报错,那么日志输出时只会有一行异常对象的值,我们无法追踪定位到底是第几行报错,只能凭程序员的经验或直觉去判断。这时我们可以试试使用 traceback 模块。
traceback.print_exc() # 在屏幕中输出异常栈
traceback.format_exc() # 把异常栈以字符串的形式返回,print(traceback.format_exc()) 的效果相当于 traceback.print_exc()
traceback.print_exception() # 其实traceback.print_exc()函数只是traceback.print_exception()函数的一个简写形式,而它们获取异常相关的数据都是通过sys.exc_info()函数得到的
示例: