打开另一个python文件时出现NameError
我一直在尝试从我的主python文件打开一个python文件:打开另一个python文件时出现NameError,python,python-2.7,Python,Python 2.7,我一直在尝试从我的主python文件打开一个python文件: from banner import * from hexed import * # this one is the file I am trying to open 我试图通过将文件作为模块来打开它们 这就是我如何称呼他们我的横幅文件工作完美,但不能说同样的hexed文件: def options(self): while True: try: try: main=raw_in
from banner import *
from hexed import * # this one is the file I am trying to open
我试图通过将文件作为模块来打开它们
这就是我如何称呼他们我的横幅文件工作完美,但不能说同样的hexed文件:
def options(self):
while True:
try:
try:
main=raw_input(bcolors.B + "PYDRAGON> " + bcolors.E)
if main == "msf":
elif main == "crypto":
hexed() #THIS IS WHERE I AM CALLING ANOTHER FILE
elif main == "print":
banner() #THIS ONE WORKS FINE
else:
print bcolors.R + "--> check your input <--" + bcolors.E
time.sleep(1)
except KeyboardInterrupt:
print (bcolors.R + bcolors.U + "\033[1m" + "\nCtrl-C Pressed! Use 'exit' to close the tool!" + bcolors.E)
time.sleep(0.9)
sys.exit()
pass
except EOFError:
print (bcolors.R + bcolors.U + "\nUser Requsted An Interrupt ..Exixting.." + bcolors.E)
time.sleep(0.9)
sys.exit()
pass
我希望这些信息能有所帮助
谢谢函数名是
witch()
,而不是hexed()
。因此:
更改此项:
elif main == "crypto":
hexed() #THIS IS WHERE I AM CALLING ANOTHER FILE
为此:
elif main == "crypto":
witch() #THIS IS WHERE I AM CALLING ANOTHER FILE
函数名是
witch()
,而不是hexed()
。因此:
更改此项:
elif main == "crypto":
hexed() #THIS IS WHERE I AM CALLING ANOTHER FILE
为此:
elif main == "crypto":
witch() #THIS IS WHERE I AM CALLING ANOTHER FILE
我不确定您真正想做什么,但您显然应该重新阅读有关导入的文档 警告/您当前的问题-执行以下操作时:
from somemodule import *
Python在sys.path
中查找“somemodule.py”,将文件作为模块加载,从模块中收集所有顶级公共名称(“顶级”:在模块级定义,“public”:在模块的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>属性中公开,或者-如果未定义\uuuuuuuu,并将它们绑定到当前名称空间中(最终重新绑定已定义的名称)
所以在这两行之后:
from banner import *
from hexed import *
您已经在脚本的全局命名空间中注入了banner.py
和hexed.py
中定义的所有名称。显然,您在某个地方定义了一个名为banner()
,被调用的是这个函数,而不是“hexed.py文件”-您不“调用文件”,这毫无意义,您可以调用函数,您可以调用类,但您不能“调用文件”(也不能“调用模块”FWIW,模块不可调用)。显然,在“hexed.py”模块中没有名为“hexed”的函数,因此出现了namererror
解决方案很清楚:用显式导入替换星形导入(无论如何都应该避免,因为它们是维护的噩梦),导入模块并通过其限定名称调用函数,即:
# imports the whole "banner" module
import banner
# the first "banner" is the module name, the second is the function
banner.banner()
或者只导入要使用的函数并直接调用它:
# imports the "banner" function from the "banner" module
from banner import banner
# calls the banner function
banner()
哦,当我们这样做的时候:namererror
不会在“打开”模块的过程中发生,但是当您尝试使用尚未定义的名称时(此处hexed
) 我不确定您真正想做什么,但您显然应该重新阅读有关导入的文档
警告/您当前的问题-执行以下操作时:
from somemodule import *
Python在sys.path
中查找“somemodule.py”,将文件作为模块加载,从模块中收集所有顶级公共名称(“顶级”:在模块级定义,“public”:在模块的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>属性中公开,或者-如果未定义\uuuuuuuu,并将它们绑定到当前名称空间中(最终重新绑定已定义的名称)
所以在这两行之后:
from banner import *
from hexed import *
您已经在脚本的全局命名空间中注入了banner.py
和hexed.py
中定义的所有名称。显然,您在某个地方定义了一个名为banner()
,被调用的是这个函数,而不是“hexed.py文件”-您不“调用文件”,这毫无意义,您可以调用函数,您可以调用类,但您不能“调用文件”(也不能“调用模块”FWIW,模块不可调用)。显然,在“hexed.py”模块中没有名为“hexed”的函数,因此出现了namererror
解决方案很清楚:用显式导入替换星形导入(无论如何都应该避免,因为它们是维护的噩梦),导入模块并通过其限定名称调用函数,即:
# imports the whole "banner" module
import banner
# the first "banner" is the module name, the second is the function
banner.banner()
或者只导入要使用的函数并直接调用它:
# imports the "banner" function from the "banner" module
from banner import banner
# calls the banner function
banner()
哦,当我们这样做的时候:namererror
不会在“打开”模块的过程中发生,但是当您尝试使用尚未定义的名称时(此处hexed
) 请发布您的hexed
模块,并检查在您的hexed.py
文件/module.hexed中是否有任何名为hexed
的可调用函数。hexed只是一个模块,您确定在hexed模块中确实有一个“hexed”函数吗?hexexed()
调用应该是witch()
我的hexed模块中没有hexed名称,尽管其中有一个“hex”函数,我认为它不会导致任何问题。请发布您的hexed
模块,并检查您的hexed.py
文件/模块中是否有任何可调用的名称hexed
。hexed只是一个模块,您确定您确实有一个“hexed”吗hexed模块内部的函数?调用hexed()
应该是witch()
在我的hexed模块中没有hexed名称,尽管其中有一个“hex”函数,我认为它不会导致任何问题谢谢我认为通过文件名调用会打开它们我的坏谢谢我认为通过文件名调用会打开它们我的坏