По логике в коде ниже объект 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.