我想知道在Python2.7中是否有为函数创建宏或别名的方法。
例如:我正在尝试使用logging模块,并为函数logging.debug、logging.info、logging.error等创建别名/宏。如果我在想要记录日志的地方使用这些函数,一切都会正常工作。但是如果我尝试像这样创建一个'alias‘函数包装器:
def debugLog(message):
logging.debug(message)..。那么行号报告就不再像预期的那样工作,报告的行总是声明包装器的位置,而不是实际的日志,这是没有任何实际用途的。
我确实找到了这个解决方案:
import logging
from logging import info as infoLog
from logging import debug as debugLog
from logging import error as errorLog
......。但它不适合我,因为我还创建了自己的日志严重程度:
logging.addLevelName(60, "NORMAL")..。如果可能的话,我还想为它创建一个别名/宏,比如normalLog(message)=logging.log(60, message)?我在Python Docs或在线上找不到任何全面的东西。
发布于 2017-07-29 03:00:32
您可以使用functools.partial
import functools
import logging
normalLog = functools.partial(logging.log, 60)它工作得很好:
normalLog("Hey!!")
Level 60:root:Hey!!partial将参数绑定到函数调用并返回一个部分对象(保存必要信息的可调用对象),因此您也可以在addLevelName方法中使用它:
activateLevel = functools.partial(logging.addLevelName, 60, "NORMAL")
activateLevel()这里您有一个live working example,请注意日志行已正确报告。
发布于 2017-07-29 03:06:22
您可以使用frame对象来获取行号。获取frame对象的方法有很多,在下面的例子中我使用了sys._getframe(),参数1给出了前一个栈帧。并不保证在所有的sys._getframe()非C实现中都存在。其他几个函数返回frame对象,包括inspect模块。
import sys
def debugLog(message):
line = sys._getframe(1).f_lineno
print line, ':', message
x = 42
print x
debugLog("A")
y = x + 1
print y
debugLog("B")提供:
42
10 : A
43
13 : Bhttps://stackoverflow.com/questions/45380540
复制相似问题