Я пишу небольшое приложение, которое должно выполнить некоторые «проверки работоспособности» перед запуском. (например, проверки работоспособности: проверьте, доступен ли определенный путь для чтения / записи / существует)
Код:
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) лямбда: None
немного неубедительна, потому что, например, если sanity_access возвращает True, выполняется лямбда: None
, а вывод будет следующим:
DEBUG:sf.core.sanity:access('/home/nomemory', 0)==True
DEBUG:sf.core.sanity:exec: <lambda>
Итак, победа » В журналах должно быть очень ясно, какая функция была выполнена. Журнал будет содержать только <лямбда>
. Есть ли функция по умолчанию, которая ничего не делает и может быть передана в качестве параметра? Это способ вернуть имя первой функции, которая выполняется внутри лямбды?
Или способ не регистрировать этот «exec», если в качестве параметра отправлено «ничего»?
Какой эквивалент none / do-nothing для функций?
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
не работает?