之前发过了装饰器版本的异常记录日志,但是需要装饰在函数或方法上。此篇用上下文管理,用一个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 上下文处理错误,记录日志的更多相关文章

  1. Python学习_07_错误、异常

    地毯式地过语法终于快要结束了... Python中的常见异常 1.NameError:尝试访问一个未初始化的变量 2. ZeroDivisionError:除数为0 3. SyntaxError:Py ...

  2. 转 Python3 错误和异常/ Python学习之错误调试和测试

    ########sample 0 https://www.cnblogs.com/Simon-xm/p/4073028.html except: #捕获所有异常 except: <异常名> ...

  3. Sublime Text 2下搭建Python环境常见错误

    Sublime Text 2下搭建Python环境时,最容易出的错误就是Python环境配置错误,导致build(Ctrl+B)后没有任何反应. 关于Python编程环境的配置,网上很容易搜索到.先默 ...

  4. Python:常见错误集锦(持续更新ing)

    初学Python,很容易与各种错误不断的遭遇.通过集锦,可以快速的找到错误的原因和解决方法. 1.IndentationError:expected an indented block 说明此处需要缩 ...

  5. Python常见的错误汇总

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...

  6. /usr/bin/python^M: 解释器错误: 没有那个文件或目录

    遇见问题 因为linux在虚拟机中,所以就在本地敲python代码,敲完后再拿到虚拟机去执行,再输入./filename.py时,就遇到这样的一个问题: bash: ./filename.py: /u ...

  7. python上下文管理

    一.python上下文介绍: python中的上下文,指的就是代码所执行的环境状态,或者运行的场景 python上下文管理器规定了某个对象的使用范围,当进入或者离开了使用范围,会有相应的操作,多用于资 ...

  8. 第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误,

    第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误, 注意:版本,不然会报错 Docker >=1.11Compose >1.6.0 通过d ...

  9. Python学习-16.Python中的错误处理

    虽然叫错误,但跟 C# 中的异常是一回事.只不过 Python 中叫错误(Error)而 C# 中叫异常(Exception). 先手工产生一个异常: file = open('','r') 上面一句 ...

随机推荐

  1. shell文本处理

    1.文件整理employee文件中记录了工号和姓名employee.txt:100 Jason Smith 200 John Doe 300 Sanjay Gupta 400 Ashok Sharma ...

  2. redis主从配置<转>

    一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...

  3. 【oneday_onepage】——Growth Is A Bitch

    Companies are worth a multiple of their earnings and that multiple is directly related to earnings g ...

  4. 前端最全的 API 集锦

    window.getComputedStyle(el,':after')[attrName]------------------------------------------------------ ...

  5. 自然语言交流系统 phxnet团队 创新实训 项目博客 (九)

    项目技术总结: VoiceToText的具体使用方法: 语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安 ...

  6. php时间段判断

    <?php function times(){ ini_set('date.timezone','Asia/Shanghai'); $time = date("Y-m-d H:i&qu ...

  7. js 实时数据显示

    js代码 <script type="text/javascript" src="jquery.js"></script> <sc ...

  8. MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚

    一.关于UTF-8 UTF-8 Unicode Transformation Format-8bit.是用以解决国际上字符的一种多字节编码. 它对英文使用8位(即一个字节) ,中文使用24位(三个字节 ...

  9. 打开应用中SQLite文件的方法

    1.先找到sdk中的platform-tools文件夹下的adb.exe 2.打开dos命令窗口依次输入 :adb shell  →  sqlite3 /data/data/com.example.s ...

  10. python 调用 C语言函数

    python可以直接调用C语言的函数,本文记录用ctypes调用c语言的方法. test.c #include <stdio.h> int test(char *temp) { print ...