Как перебрать глобальные переменные в функции?
Есть кусок бота для телеграмма, при старте программы нужно проверить, что переменные, необходимые для запуска на месте, и их булево не False. пока родилось только ужасное решение:
GLOBAL_VAR_1 = None
GLOBAL_VAR_2 = 2
GLOBAL_VAR_3 = 3
def check_vars():
"""Функция проверяет доступность переменных окружения."""
required_vars = ['GLOBAL_VAR_1', 'GLOBAL_VAR_2', 'GLOBAL_VAR_3']
for var in required_vars:
if var not in globals():
return False
global GLOBAL_VAR_1, GLOBAL_VAR_2, GLOBAL_VAR_3
if GLOBAL_VAR_1 is None:
return False
if GLOBAL_VAR_2 is None:
return False
if GLOBAL_VAR_3 is None:
return False
return True
if not check_vars():
print('Поломалось')
Хочется сделать что-то наподобие этого:
GLOBAL_VAR_1 = None
GLOBAL_VAR_2 = 2
GLOBAL_VAR_3 = 3
def check_vars():
"""Функция проверяет доступность переменных окружения."""
required_vars = ['GLOBAL_VAR_1', 'GLOBAL_VAR_2', 'GLOBAL_VAR_3']
for var in required_vars:
try:
global var
if var != None:
continue
except:
return False
return True
Но не понимаю, как передать в "глобализацию" строку как переменную, а не "глобализировать" ключ цикла
Ответы (1 шт):
Автор решения: Дмитрий Игоревич
→ Ссылка
Если именами глобальных переменных можно управлять, то например можно придумать для них какой-нибудь префикс, чтобы по нему можно было их вынимать из общего скоупа. И тогда можно получить их имена и значения например вот так:
GLOBAL_AAA = "asdf"
GLOBAL_BBB = "asdfasdf"
user_globals = [item for item in globals().items() if item[0].startswith("GLOBAL_")]
print(user_globals) # [('GLOBAL_AAA', 'asdf'), ('GLOBAL_BBB', 'asdfasdf')]
Ну а делее делать любые проверки с ними. Кол-во переменных соответственно динамическое.