当前位置:脚本大全 > > 正文

python异常信息处理(Python使用修饰器进行异常日志记录操作示例)

时间:2021-11-08 14:36:59类别:脚本大全

python异常信息处理

Python使用修饰器进行异常日志记录操作示例

本文实例讲述了Python使用修饰器进行异常日志记录操作。分享给大家供大家参考,具体如下:

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

在log_exception.py文件中,

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 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文件中:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 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 liision 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
    ZeroliisionError: integer liision 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/

    希望本文所述对大家Python程序设计有所帮助。

    原文链接:https://www.cnblogs.com/arkenstone/p/7901065.html

    上一篇下一篇

    猜您喜欢

    热门推荐