По логике в коде ниже объект A должен найтись в globals, но возникакет ошибка из-за пустого locals.
Но если не передавать locals то все ок, из-за чего так?
В конечном счете нужно что бы eval смог нормально отрабаывать на таком выражении:
eval('A')
(оно же eval("A")
) вернёт NameError, потому что в текущих locals() и globals(), где вызывается eval(), нет объекта A.eval("'A' not in locals()")
вернёт True, потому что в locals() нет объекта с именем 'A'.eval("B == 'n'")
вернёт NameError по той же причине, что в 1-м примере.>> B = {'X': 'y'}
eval("B == 'n'")
вернёт False, потому что сравнивается словарь {'X': 'y'} со строкой 'n'.eval("B == n")
вернёт NameError, потому что нет объявления n.eval("B == n", {'n': {'X': 'y'})
вернёт NameError, потому что в переданных globals и locals нет B. public_url
.