python 修饰器_python中用修饰器进行异常日志记录
當腳本中需要進行的的相同的異常操作很多的時候,可以用修飾器來簡化代碼。比如我需要記錄拋出的異常:
在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 "", line 16, in wrapper
fn(*args, **kwargs)
File "", line 3, in reciprocal
return 1/x
ZeroDivisionError: integer division or modulo by zero
參考:
總結(jié)
以上是生活随笔為你收集整理的python 修饰器_python中用修饰器进行异常日志记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白岩松评价中国女足:这四点强于男足!
- 下一篇: 银杏的功效与作用