當指令碼中需要進行的的相同的異常操作很多的時候,可以用修飾器來簡化**。比如我需要記錄丟擲的異常:
在log_exception.py檔案中,
import functools
import logging
defcreate_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
deflog_exception
(fn)
: @functools.wraps(fn)
def(
*args,
**kwargs)
: 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
defreciprocal
(x):
return1/x
if __name__ ==
"__main__":
reciprocal(
0)
在test.log檔案中可以看到以下錯誤資訊:
[
2017-11
-2623:
37:41,
012-test_log-error]
:[error in __main__] msg: integer division or modulo by zero
traceback (most recent call last)
: file ""
, line 16
, fn(
*args,
**kwargs)
file ""
, line 3
,in reciprocal
return1/x
zerodivisionerror: integer division or modulo by zero
python中用修飾器進行異常日誌記錄
當指令碼中需要進行的的相同的異常操作很多的時候,可以用修飾器來簡化 比如我需要記錄丟擲的異常 在log exception.py檔案中,import functools import logging def create logger logger logging.getlogger test lo...
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...