我正在写一个小应用程序,必须执行一些'健全检查'才进入执行。(例如,健全性检查:测试某个路径是否可读/写/存在)
代码:import logging
import os
import shutil
import sys
from paths import PATH
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger('sf.core.sanity')
def sanity_access(path, mode):
ret = os.access(path, mode)
logfunc = log.debug if ret else log.warning
loginfo = (os.access.__name__, path, mode, ret)
logfunc('%s(\'%s\', %s)==%s' % loginfo)
return ret
def sanity_check(bool_func, true_func, false_func):
ret = bool_func()
(logfunc, execfunc) = (log.debug, true_func) if ret else \
(log.warning, false_func)
logfunc('exec: %s', execfunc.__name__)
execfunc()
def sanity_checks():
sanity_check(lambda: sanity_access(PATH['userhome'], os.F_OK), \
lambda: None, sys.exit)
我的问题与sanity_check函数有关。
这个函数有3个参数(bool_func,true_func,false_func)。如果bool_func(测试函数,返回布尔值)失败,则执行true_func,否则执行false_func。
1)lambda: None有点蹩脚,因为例如,如果健全访问返回True,则执行lambda: None,并且打印的输出将是:DEBUG:sf.core.sanity:access('/home/nomemory', 0)==True
DEBUG:sf.core.sanity:exec:
所以在日志中不太清楚执行了什么函数。日志将只包含。是否有一个默认函数什么也不做,并且可以作为参数传递?这是返回lambda中正在执行的第一个函数的名称的方法吗?
或者如果“nothing”作为参数发送,则不记录该“exec”的方法?
函数的“无/不做”等价于什么?sanity_check(lambda: sanity_access(PATH['userhome'], os.F_OK), \
>, sys.exit)
另外一个问题,为什么lambda: pass而不是lambda: None不起作用?