python中用修飾器進行異常日誌記錄

2021-09-25 07:37:24 字數 1300 閱讀 7114

當指令碼中需要進行的的相同的異常操作很多的時候,可以用修飾器來簡化**。比如我需要記錄丟擲的異常:

在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)

logger = create_logger()

try:

fn(*args, **kwargs)

except exception as e:

logger.exception("[error in {}] msg: {}".format(__name__, str(e)))

raise

在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):

fn(*args, **kwargs)

file "", line 3, in reciprocal

return 1/x

zerodivisionerror: integer division or modulo by zero

參考:

python中用修飾器進行異常日誌記錄

當指令碼中需要進行的的相同的異常操作很多的時候,可以用修飾器來簡化 比如我需要記錄丟擲的異常 在log exception.py檔案中,import functools import logging defcreate logger logger logging.getlogger test log...

python中 修飾器

參考文章 python中 修飾符 示例如下 def test func func test deffun print call fun 上面的 會輸出 call fun 修飾符有點像函式指標,python直譯器發現執行的時候如果碰到 修飾的函式,首先就解析它,找到它對應的函式進行呼叫,並且會把 修飾...

python 修飾器作用

在python的函式中,函式定義的上一行有 functionname的修飾,當直譯器讀到 這樣的修飾符之後,會先解析 後的內容,把 下一行的函式或者類作為 後邊的函式的引數,然後將返回值賦值給下一行修飾的函式物件。比如 a bdef c deffunca a print in func a deff...