python 上下文处理错误,记录日志
之前发过了装饰器版本的异常记录日志,但是需要装饰在函数或方法上。此篇用上下文管理,用一个with就能记录错误了,不需要写成函数。
import traceback
# pip install multiprocessing_log_manager
from multiprocessing_log_manager import LogManager class ExceptionContextManager():
"""
用上下文管理器捕获异常,可对代码片段进行错误捕捉,比装饰器更细腻
""" def __init__(self, logger_name='ExceptionContextManager', verbose=100, donot_raise__exception=True, ):
"""
:param _verbose: 打印错误的深度,对应traceback对象的limit,为正整数
:param donot_raise__exception:是否不重新抛出错误,为Fasle则抛出,为True则不抛出
"""
self.logger = LogManager(logger_name).get_logger_and_add_handlers()
self._verbose = verbose
self._donot_raise__exception = donot_raise__exception def __enter__(self):
return self def __exit__(self, exc_type, exc_val, exc_tb):
# print(exc_val)
# print(traceback.format_exc())
exc_str = str(exc_type) + ' : ' + str(exc_val)
exc_str_color = '\033[0;30;45m%s\033[0m' % exc_str
if self._donot_raise__exception:
self.logger.error('\n'.join(traceback.format_tb(exc_tb)[:self._verbose]) + exc_str_color)
return self._donot_raise__exception # __exit__方法必须retuen True才会不重新抛出错误 if __name__ == '__main__':
def f1():
1 + '' def f2():
f1() def f3():
f2() def f4():
f3() def run():
f4() with ExceptionContextManager() as ec:
run()
print('finish')
计算整形和字符串相加,运行结果是这样:

可以传verbose参数来控制记录错误的深度,默认写了100
python 上下文处理错误,记录日志的更多相关文章
- Python学习_07_错误、异常
地毯式地过语法终于快要结束了... Python中的常见异常 1.NameError:尝试访问一个未初始化的变量 2. ZeroDivisionError:除数为0 3. SyntaxError:Py ...
- 转 Python3 错误和异常/ Python学习之错误调试和测试
########sample 0 https://www.cnblogs.com/Simon-xm/p/4073028.html except: #捕获所有异常 except: <异常名> ...
- Sublime Text 2下搭建Python环境常见错误
Sublime Text 2下搭建Python环境时,最容易出的错误就是Python环境配置错误,导致build(Ctrl+B)后没有任何反应. 关于Python编程环境的配置,网上很容易搜索到.先默 ...
- Python:常见错误集锦(持续更新ing)
初学Python,很容易与各种错误不断的遭遇.通过集锦,可以快速的找到错误的原因和解决方法. 1.IndentationError:expected an indented block 说明此处需要缩 ...
- Python常见的错误汇总
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...
- /usr/bin/python^M: 解释器错误: 没有那个文件或目录
遇见问题 因为linux在虚拟机中,所以就在本地敲python代码,敲完后再拿到虚拟机去执行,再输入./filename.py时,就遇到这样的一个问题: bash: ./filename.py: /u ...
- python上下文管理
一.python上下文介绍: python中的上下文,指的就是代码所执行的环境状态,或者运行的场景 python上下文管理器规定了某个对象的使用范围,当进入或者离开了使用范围,会有相应的操作,多用于资 ...
- 第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误,
第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误, 注意:版本,不然会报错 Docker >=1.11Compose >1.6.0 通过d ...
- Python学习-16.Python中的错误处理
虽然叫错误,但跟 C# 中的异常是一回事.只不过 Python 中叫错误(Error)而 C# 中叫异常(Exception). 先手工产生一个异常: file = open('','r') 上面一句 ...
随机推荐
- shell文本处理
1.文件整理employee文件中记录了工号和姓名employee.txt:100 Jason Smith 200 John Doe 300 Sanjay Gupta 400 Ashok Sharma ...
- redis主从配置<转>
一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...
- 【oneday_onepage】——Growth Is A Bitch
Companies are worth a multiple of their earnings and that multiple is directly related to earnings g ...
- 前端最全的 API 集锦
window.getComputedStyle(el,':after')[attrName]------------------------------------------------------ ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (九)
项目技术总结: VoiceToText的具体使用方法: 语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安 ...
- php时间段判断
<?php function times(){ ini_set('date.timezone','Asia/Shanghai'); $time = date("Y-m-d H:i&qu ...
- js 实时数据显示
js代码 <script type="text/javascript" src="jquery.js"></script> <sc ...
- MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚
一.关于UTF-8 UTF-8 Unicode Transformation Format-8bit.是用以解决国际上字符的一种多字节编码. 它对英文使用8位(即一个字节) ,中文使用24位(三个字节 ...
- 打开应用中SQLite文件的方法
1.先找到sdk中的platform-tools文件夹下的adb.exe 2.打开dos命令窗口依次输入 :adb shell → sqlite3 /data/data/com.example.s ...
- python 调用 C语言函数
python可以直接调用C语言的函数,本文记录用ctypes调用c语言的方法. test.c #include <stdio.h> int test(char *temp) { print ...