Здравствуйте, наткнулся на непонимаение работы 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.