我刚刚开始使用Python,也许我太担心太多了,但无论如何......
log = "/tmp/trefnoc.log"
def logThis (text, display=""):
msg = str(now.strftime("%Y-%m-%d %H:%M")) + " TREfNOC: " + text
if display != None:
print msg + display
logfile = open(log, "a")
logfile.write(msg + "\n")
logfile.close()
return msg
def logThisAndExit (text, display=""):
msg = logThis(text, display=None)
sys.exit(msg + display)
这是有效的,但我不喜欢它的样子。有没有更好的方法来写这个(可能只有1个函数)并且any other thing 我应该关注退出吗?
现在有些背景(但不是关于trefnoc)......
有时我会调用logThis
来记录和显示。其他时候我想打电话然后退出。最初我这样做:
logThis ("ERROR. EXITING")
sys.exit()
然后我认为不能正确设置stderr
,因此当前代码显示在顶部。
我的第一个想法实际上是将“sys.exit”作为参数传递,并将logThis ("ERROR. EXITING", call=sys.exit)
定义为以下定义(仅显示相关的差异部分):
def logThis (text, display="", call=print):
msg = str(now.strftime("%Y-%m-%d %H:%M")) + " TREfNOC: " + text
call msg + display
但这显然不起作用。我认为Python不会将函数存储在变量中。如果Python可以使用变量获取函数,我就无法(快速)找到任何地方!也许使用eval
函数?我真的总是尽量避免它们,所以。我当然想过使用if
代替另一个def
,但这不会更好或更差。
无论如何,有什么想法吗?
答案 0 :(得分:2)
“logThisAndExit”没有理由,它不会为你节省太多打字
sys.exit(logThis(text)+display)
(比较logThisAndExit(text, display)
)
或
sys.exit(logThis(text))
(比较logThisAndExit(text)
)
并非我完全确定您为什么喜欢将格式化为日志行的退出邮件。
回答原来的问题:你遗漏了括号:call(msg+display)
工作正常。但是我认为这对于记录/退出事物来说是过度的过度工作。维护代码的任何人都必须了解您的功能,以了解它何时退出以及何时退出。
答案 1 :(得分:2)
答案 2 :(得分:1)
您可以修改logThis
以获取名为shouldExit
的最终参数,默认为None
,然后作为该方法的最后一步,如果值为true,则调用{{1} }}
答案 3 :(得分:1)
print
是python<中的关键字,而不是函数。试试这个:
def do_print(x):
print x
def logThis (text, display="", call=do_print):
msg = str(now.strftime("%Y-%m-%d %H:%M")) + " TREfNOC: " + text
call(msg + display)
你有没有理由不使用logging
模块? (见http://onlamp.com/pub/a/python/2005/06/02/logging.html)
答案 4 :(得分:0)
就像参考一样,这是我从David和moshez那里吸收暗示之后的最终代码。最后我决定现在只想要一个功能。谢谢大家!
log = "/tmp/trefnoc.log"
def logThis (text, display=""):
msg = str(now.strftime("%Y-%m-%d %H:%M")) + " TREfNOC: " + text
if display != None:
print msg + display
logfile = open(log, "a")
logfile.write(msg + "\n")
logfile.close()
return msg
# how to call it on exit:
sys.exit(logThis("ERROR, EXITING", display=None))