У меня есть функция test()
, которая должна проверять, является ли строка допустимым файлом Python. (Строка обычно извлекается из файла readme или около того.) Запуск exec()
в строке работает хорошо, если только в этой ситуации:
string = """
import math
def f(x):
return math.sqrt(x)
f(2.0)
"""
# no problem:
# exec(string)
def test():
exec(string)
test() # NameError: name 'math' is not defined
Traceback (most recent call last):
File "d.py", line 17, in <module>
test()
File "d.py", line 15, in test
exec(string)
File "<string>", line 7, in <module>
File "<string>", line 5, in f
NameError: name 'math' is not defined
Почему exec()
не обнаруживает import math
если вызывается через функцию, но работает при запуске в основной области? Как обойти это в test()
?