[结束语] 谢谢所有帮助我的人。在
我已经发现了这个问题,这与python对我的理解(我的理解很少)无关。:p
问题是我编辑了同一个项目的错误分支,主.py在一个分支和XWinInfos.py在另一个分支机构。在
不管怎样,谢谢你。在
[原题] 我是一个Java/PHP/Delphi程序员,只在破解别人的程序时使用Python——从来没有亲自编写过复杂的Python。因为这周我的空闲时间很短,所以我决定用Python写一些非琐碎的东西,这是我的问题
首先,我有这样的python文件:
src/
main.py
SomeUtils.py
在“SomeUtils.py,我有几个函数和一个类:
^{pr2}$然后在“主.py“,我使用函数和类:
from SomeUtils import *;
def main():
funct1(); # Use funct1 without problem;
aMyObj1 = MyClass1(); # Use MyClass1 with error
if (__name__ == "__main__"):
main();
问题是函数的使用没有任何问题,但是我不能使用这个类。在
错误是:
NameError: global name 'MyClass1' is not defined
这里有什么问题?我能做什么?在
编辑:谢谢你的回答,因为我还有问题。:( 当我将导入语句更改为:
from SomeUtils import funct1
from SomeUtils import MyClass1
我有这个错误
ImportError: cannot import name MyClass1
编辑2:------------------------------------------------------
谢谢你们。在
我认为,发布实际代码可能更好,因此如下所示:
注意:我知道“;”和“(…)”,但我喜欢这样。在
这是dir结构。 DIRS http://dl.getdropbox.com/u/1961549/images/Python_import_prolem_dir_.png 如您所见,我只添加了一个空的init.py,但似乎没有什么不同。在
给你主.py公司名称:
from XWinInfos import GetCurrentWindowTitle;
from XWinInfos import XWinInfo;
def main():
print GetCurrentWindowTitle();
aXWinInfo = XWinInfo();
if (__name__ == "__main__"):
main();
给你XWinInfos.py公司名称:
from subprocess import Popen;
from subprocess import PIPE;
from RegExUtils import GetTail_ofLine_withPrefix;
def GetCurrentWindowID():
aXProp = Popen(["xprop", "-root"], stdout=PIPE).communicate()[0];
aLine = GetTail_ofLine_withPrefix("_NET_ACTIVE_WINDOW\(WINDOW\): window id # 0x", aXProp);
return aLine;
def GetCurrentWindowTitle():
aWinID = GetCurrentWindowID();
aWinTitle = GetWindowTitle(aWinID);
return aWinTitle;
def GetWindowTitle(pWinID):
if (aWinID == None): return None
aWMCtrlList = Popen(["wmctrl", "-l"], stdout=PIPE).communicate()[0];
aWinTitle = GetTail_ofLine_withPrefix("0x[0-9a-fA-F]*" + aWinID + "[ ]+[\-]?[0-9]+[ ]+[^\ ]+[ ]+", aWMCtrlList);
return aWinTitle;
class XWinInfo:
def __init__(self):
aWinID = GetCurrentWindowID();
self.WinID = pWinID;
self.Title = GetWindowTitle(pWinID);
文件RegExUtils.py包含一个函数“GetTail_of line_with prefix”,该函数工作正常。在
如果我使用“from XWinInfos import*;”,则错误为“NameError:global name‘XWinInfo’is not defined”。在
如果我使用“from XWinInfos import XWinInfo;”,则错误为“ImportError:cannot import name XWinInfo”。在
请帮忙。 提前谢谢。在
嗯。。。在你的例子中有几个错别字,所以我想知道你的实际代码是否也有一些错别字。下面是一个快速测试的完整源代码,它工作正常,没有导入错误。在
在SomeUtils.py公司名称:
在主.py公司名称:
^{pr2}$[根据操作附加信息编辑]
我仍然无法重新创建相同的错误,但是您发布的代码在最初对XWinInfox.pyinit方法:
所以更正后的版本应该是:
另外,您的init文件名中有一个拼写错误,“init”单词前后应该有两个下划线。现在您有
'__init_.py'
,它应该是'__init__.py'
,但是这不应该阻止您的代码工作。在因为我没有RegExUtils.py代码,我只是删除了依赖于该文件的方法。有了stubbed方法并更正了前面提到的错误,您发布的代码现在可以工作了。在
你可能想重写主.py具体如下:
简要说明:
为什么要从
XWinInfos
导入?您应该从SomeUtils
导入。更不用说不鼓励*
样式的导入。在编辑:您的错误
基本上告诉你在
SomeUtils
中没有MyClass1
定义。这可能是因为您在系统路径上的某个地方有另一个SomeUtils.py
文件,而该文件正在被导入。如果该文件没有MyClass1
,则会出现此错误。在再说一遍:你的类
MyClass1
是否存在无关紧要。{你的系统中可能有另一个案例。否则:norepro。在相关问题 更多 >
编程相关推荐