В Python 2.7 Я имел обыкновение использовать следующий код (я использую пакет emcee ):
def main():
from emcee import moves
emcee_moves = ['KDEMove(),0.5', 'DEMove(),0.5']
mv = [(eval("moves." + _)) for _ in emcee_moves]
if __name__ == '__main__':
main()
Я использую это, потому что я кормлю «перемещается» через файл входных параметров (это небольшая часть гораздо большего кода), что означает, что они читаются как строки. В Python 3.x теперь выдается:
*** NameError: name 'moves' is not defined
Это, по-видимому, связано с этим исправлением ошибка , как упоминалось в этом старом вопросе: Eval scope в Python 2 против 3 .
Я также читал, что использование eval()
обычно не рекомендуется. Мой вопрос заключается в следующем: как мне повторить приведенный выше код, который работал в Python 2,7?
Edit
Это фактический код, который выходит из строя. Она должна быть внутри функции, иначе она не выйдет из строя.