我刚开始使用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,但这不会更好或更糟.
无论如何,有什么想法吗?
解决方法:
没有理由“logThisAndExit”,它不会为你输入多少钱
sys.exit(logThis(text)+display)
(比较logThisAndExit(文本,显示))
要么
sys.exit(logThis(text))
(比较logThisAndExit(文本))
并不是说我完全确定你为什么喜欢将格式化为日志行的退出消息.
回答你的原始问题:你缺少括号:call(msg display)工作正常.但是我认为这对于记录/退出事物来说是过度的过度工作.维护代码的任何人都必须了解您的功能,以了解它何时退出以及何时退出.