我一直在尝试从我的主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_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
我的横幅功能完美无缺,但每当我尝试调用我的hexed python文件时,它都会给我这个错误
Traceback (most recent call last):
File "pydragon.py", line 149, in <module>
obj.options()
File "pydragon.py", line 115, in options
hexed()
NameError: global name 'hexed' is not defined
我检查了所有空格和标签,我认为没有任何缩进错误
下面的是我的hexed文件的代码
def witch(self):
main = raw_input(bcolors.R + "Crytography> " + bcolors.E)
if main == 1:
hound = raw_input(R + bcolors.U + 'String to encode>' + bcolors.E)
hound = hound.encode('hex','strict');
print ""+ G +"Encoded: " + hound
elif main == 2:
hound1 = raw_input(R + bcolors.U + 'String to decode>' + bcolors.E)
hound1 = hound.decode('hex','strict');
print ""+ G +"Decoded String: " + hound1
else:
print '\033[31m' + bcolors.BL + "GRRRR, what your'e trying to type ?? " + bcolors.E
我希望这些信息有所帮助 谢谢
答案 0 :(得分:1)
函数名称为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
答案 1 :(得分:1)
我不确定你真正想做什么,但你应该重新阅读有关进口的文件。
wrt /你当前的问题 - 在做的时候:
from somemodule import *
Python在sys.path
中查找“somemodule.py”,将文件作为模块加载,从模块中收集所有顶级公共名称(“顶级”:在模块级别定义,“ public“:在模块的__all__
属性中公开,或者 - 如果未定义__all__
- 不以下划线开头),并将它们绑定在当前命名空间中(最终重新绑定已定义的名称)。
所以在这两行之后:
from banner import *
from hexed import *
您已在脚本的全局命名空间中注入banner.py
和hexed.py
中定义的所有名称。你显然在某个地方定义了一个名为banner()
的函数,并且这个函数被调用,不是“hexed.py文件” - 你没有“调用文件”,这没有感觉,你可以调用一个函数,你可以调用一个类,但你不能“调用一个文件”(也不能“调用模块”FWIW,模块不可调用)。显然,在你的“hexed.py”模块中没有名为“hexed”的函数,因此NameError
。
解决方案很明确:通过显式导入替换您的星级导入(因为它们是维护噩梦应该避免),导入模块并通过它的限定名称调用您的函数,即:
# 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()
哦,当我们在它时:NameError
在“你的模块打开期间,但是当你尝试使用一个名字(这里hexed
)时没有发生settings->search 'hardware acceleration'
在这一点上定义。