Как проверить, что многие функции завершились успешно? — Python

#python-3.x

#python-3.x

Вопрос:

У меня есть функция, которую я хочу запустить, только если 6 предыдущих функций вернулись True или успешно. В настоящее время я делаю это с помощью следующего кода:

 PATHS_GOOD = COUNT_EQUAL = ALL_FILES_PAIRED = VAL_PATHS_GOOD = VAL_COUNT_EQUAL = VAL_ALL_FILES_PAIRED = ALL_CLEAR = False

# Execute functions that change the state of COUNT_EQUAL etc
ALL_CLEAR = PATHS_GOOD and COUNT_EQUAL and ALL_FILES_PAIRED and VAL_PATHS_GOOD and VAL_COUNT_EQUAL and VAL_ALL_FILES_PAIRED

if ALL_CLEAR: 
    #Execute
  

Могу ли я просто использовать более короткие имена переменных? Конечно, но тогда никто другой не будет знать, за что отвечает эта переменная. Этот подход не будет хорошо масштабироваться, если мне придется продолжать добавлять дополнительные проверки. Итак, как я могу сделать это менее подробным и масштабируемым?

Комментарии:

1. Поместите значения в словарь.

Ответ №1:

Как правило, не рекомендуется передавать информацию путем изменения глобальных переменных. Вместо этого вы могли бы заставить функции возвращать a bool на основе их успеха, а затем использовать all() для проверки того, что все они вернулись True :

 if all((
    paths_good(),
    count_equal(),
    all_files_paired(),
    val_paths_good(),
    val_count_equal(),
    val_all_files_paired(),
)):
    # execute
  

Или, в качестве альтернативы, просто используйте and между каждым вызовом функции:

 if (
    paths_good() 
    and count_equal() 
    and all_files_paired() 
    and val_paths_good() 
    and val_count_equal() 
    and val_all_files_paired()
):
    # execute
  

Комментарии:

1. @S.Ramjit Слишком большая тема для освещения здесь, лучшие хиты из поиска Google: python why global variables are bad должны объяснить это довольно хорошо 🙂