当脚本中需要进行的的相同的异常操作很多的时候,可以用修饰器来简化代码。比如我需要记录抛出的异常:

在log_exception.py文件中,

import functools
import logging def create_logger():
logger = logging.getLogger("test_log")
logger.setLevel(logging.INFO)
fh = logging.FileHandler("test.log")
fmt = "[%(asctime)s-%(name)s-%(levelname)s]: %(message)s"
formatter = logging.Formatter(fmt)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger def log_exception(fn):
@functools.wraps(fn)
def wrapper(*args, **kwargs):
logger = create_logger()
try:
fn(*args, **kwargs)
except Exception as e:
logger.exception("[Error in {}] msg: {}".format(__name__, str(e)))
raise
return wrapper

在test.py文件中:

from log_exception import log_exception

@log_exception
def reciprocal(x):
return 1/x if __name__ == "__main__":
reciprocal(0)

在test.log文件中可以看到以下错误信息:

[2017-11-26 23:37:41,012-test_log-ERROR]: [Error in __main__] msg: integer division or modulo by zero
Traceback (most recent call last):
File "<ipython-input-43-cfa2d18586a3>", line 16, in wrapper
fn(*args, **kwargs)
File "<ipython-input-46-37aa8ff0ba48>", line 3, in reciprocal
return 1/x
ZeroDivisionError: integer division or modulo by zero

参考:

  1. https://wiki.python.org/moin/PythonDecorators
  2. https://www.blog.pythonlibrary.org/2016/06/09/python-how-to-create-an-exception-logging-decorator/

最新文章

  1. WPF系列:样式
  2. iOS 使用SDwebImage缓存图片并在断网时候显示
  3. c#调用系统资源大集合-1
  4. javaweb学习总结四(反射技术)
  5. ubuntu 安装sublime并激活
  6. CSS3的基础知识点
  7. 配置FindBugs和常见FindBugs错误
  8. 测试驱动开发实践3————从testList开始
  9. css 相关算法
  10. 软工+C(4): Alpha/Beta换人
  11. ajax return 的问题
  12. myelipse与maven结合配置
  13. cdnbest区域里快速配置全部节点的缓存
  14. Working days
  15. 基于SSH实现员工管理系统之框架整合篇
  16. 10-padding(内边距)
  17. table-layout:fixed 布局注意事项
  18. [记录]Visual Studio 插件
  19. 使用git工具将本地电脑上的代码上传至GitHub
  20. 自定义控件_StickyNavLaout

热门文章

  1. webpack 练习笔记
  2. 19 个必须知道的 Visual Studio 快捷键
  3. 使用 IntraWeb (37) - TIWApplication
  4. Nginx&mdash;&mdash;使用 Nginx 提升网站访问速度【转载+整理】
  5. 熬之滴水成石:最想深入了解的内容--windows内核机制(6)
  6. python2判断编码格式
  7. vue中使用some删除list中的数据
  8. java.util.WeakHashMap
  9. [kubernetes]helm安装
  10. (转)超过 130 个你需要了解的 vim 命令