Альтернативы exec/eval?

Я пытаюсь найти способ надежно установить и получить значения переменных с именами в строках. Все, что я могу найти удаленно близко к этому, похоже, не всегда работает. Переменные могут быть в любом модуле, и эти модули импортируются.

Каков безопасный/правильный способ получить и установить значения переменных?

ps - Я как newb, поскольку они приходят на python

Ответ 1

Пока это будет работать, обычно не рекомендуется использовать имена переменных, имеющие значение для самой программы.

Вместо этого лучше использовать dict:

mydict = {'spam': "Hello, world!"}
mydict['eggs'] = "Good-bye!"
variable_name = 'spam'
print mydict[variable_name]  # ==> Hello, world!
mydict[variable_name] = "some new value"
print mydict['spam']  # ==> "some new value"
print mydict['eggs']  # ==> "Good-bye!"

(код, взятый из другого ответа и измененный)

Ответ 2

spam = "Hello, world!"
variable_name = 'spam'
print globals()[variable_name]  # ==> Hello, world!
globals()[variable_name] = "some new value"
print spam  # ==> some new value