我是一个小型应用程序的编写者,在进入执行之前必须进行一些 "健全性检查"。(例如:测试某个路径是否可读/可写/存在)
代码如下:
我的问题与
该函数有三个参数(
代码如下:
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
函数有关。该函数有三个参数(
bool_func
,true_func
,false_func
)。如果bool_func
(测试函数,返回布尔值)失败,则执行true_func
,否则执行false_func
。
1) lambda: None
有点简单,因为例如如果sanity_access
返回True,则会执行lambda: None
,并打印以下输出:DEBUG:sf.core.sanity:access('/home/nomemory', 0)==True
DEBUG:sf.core.sanity:exec: <lambda>
因此,在日志中不会很清楚地显示执行了哪个函数。日志只包含<lambda>
。是否有一个默认的函数可以什么都不做并作为参数传递?是否有一种方法可以返回在lambda内部执行的第一个函数的名称?
或者,如果将“nothing”作为参数发送,则不记录“exec”有什么方法吗?
函数的无操作/什么也不做的等效方式是什么?
sanity_check(lambda: sanity_access(PATH['userhome'], os.F_OK), \
<do nothing, but show something more useful than <lambda>>, sys.exit)
还有一个问题,为什么使用lambda: pass
而不是lambda: None
会出现问题?