我有一个函数test()
应该检查一个字符串是否是一个有效的 Python 文件。(字符串通常是从自述文件中提取的。)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
if ,而是在主范围内运行它时工作?如何解决它test()
?