我试图通过使用它成功调用的eval()
函数从另一个模块调用模块但是在控制台输出中我收到错误消息,例如" NameError:name' Login_CSA'未定义"
我已经编写了这样的代码
在sample.py模块中
import ReferenceUnits
def calling():
str='Login_CSA'
eval(str)
calling()
在ReferenceUnits.py
中import Login_CSA
并在Login_CSA.py中写过
def Hai():
print "hello this is somesh"
print 'hi welcome to Hai function'
Hai()
它正在执行,但最终收到错误消息,如"NameError: name 'Login_CSA' is not defined"
为什么会这样?
答案 0 :(得分:2)
我的猜测是你试图“包含并评估第二个脚本”,就像你在PHP中所做的那样。在Python中,当您import
文件时,所有方法都可以在本地脚本中使用。因此,不是eval
文件,而是从它调用方法。
import ReferenceUnits
import Login_CSA
def calling():
Login_CSA.Hai()
if __name__ == "__main__":
calling()
并将Login_CSA.py
更改为
def Hai():
print "hello this is somesh"
print 'hi welcome to Hai function'
if __name__ == "__main__":
Hai()
if __name__ == "__main__":
块很重要,因为它会阻止导入的脚本在import
期间执行代码(您很少想在导入时执行代码)。
答案 1 :(得分:1)
函数eval()
执行有效的python表达式,例如:
>>> x = 1
>>> print eval('x+1')
2
在您的情况下,eval()
函数会查找根本不存在的变量Login_CSA
,因此返回NameError: name 'Login_CSA' is not defined
答案 2 :(得分:1)
如果你
Login_CSA
中的ReferenceUnits.py
,ReferenceUnits
中的sample.py
,您必须访问
ReferenceUnits
使用ReferenceUnits
,Login_CSA
使用ReferenceUnits.Login_CSA
和Hai
使用ReferenceUnits.Login_CSA.Hai
。所以你可以做到
def calling():
str='ReferenceUnits.Login_CSA.hai'
eval(str)() # the () is essential, as otherwise, nothing gets called.
calling()