«Ошибка имени: имя ‘numpy’ не определено» при вызове eval()

#python #numpy #eval

#python #numpy #eval

Вопрос:

 x = 0
x2 = 0
f = "numpy.sin(x)"
e1 = eval(f)
e2 = eval(f, {"x":x2})
 

Строка для e2 (но не e1) выдает ошибку:

 NameError: name 'numpy' is not defined
 

Почему?

Комментарии:

1. В e2 вы предоставляете глобальную среду, которая не знает о numpy.

2. Потому что вы вставляете глобальный словарь, у которого нет этого имени … так, может быть, вы хотите eval(f, {"x":x2, "numpy":nump}) ?

Ответ №1:

Поскольку в e1 вы не переопределяете глобальные переменные, numpy существует. В e2 это так, поэтому ваш импорт не может быть виден интерпретатору. Просто передайте numpy как переменную.

e2 = eval(f, {'numpy': numpy, 'x':x2})

Комментарии:

1. Спасибо, но это все равно приводит к «NameError: имя ‘numpy’ не определено». Я решил свою проблему, заменив «numpy.sin (x)» на «__import__(‘numpy’).sin (x)».

Ответ №2:

Я решил это, заменив:

 f = "numpy.sin(x)"
 

с:

 f = "__import__('numpy').sin(x)"