Передача «None» в качестве параметра функции (где параметр - это функция)

Я пишу небольшое приложение, которое должно выполнить некоторые «проверки работоспособности» перед запуском. (например, проверки работоспособности: проверьте, доступен ли определенный путь для чтения / записи / существует)

Код:

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 не работает?

8
задан NullUserException 16 September 2010 в 21:09
поделиться