Задать вопрос
th3mis
@th3mis

Как понять eval в Python?

Здравствуйте, наткнулся на непонимаение работы eval в Python.
По логике в коде ниже объект A должен найтись в globals, но возникакет ошибка из-за пустого locals.
from collections import defaultdict
glob = defaultdict(lambda: 'n', {'X': 'y'})
eval('A', glob, {})
>>> NameError: name 'A' is not defined


Но если не передавать locals то все ок, из-за чего так?
from collections import defaultdict
glob = defaultdict(lambda: 'n', {'X': 'y'})
eval("'A'=='n'", glob)
>>> True


В конечном счете нужно что бы eval смог нормально отрабаывать на таком выражении: "'A' not in locals() or B=='n'", и нужно учесть что каких-то значений может не быть, из-за этого я и использую defaultdict.
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Средний 10 комментариев
Пригласить эксперта
Ответы на вопрос 1
th3mis
@th3mis Автор вопроса
в итоге решилось костылем типа defaultdict(lambda: 'n', {'locals': lambda: 'n', **options})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы