【发布时间】:2009-09-15 15:24:20
【问题描述】:
[结束注] 感谢所有试图帮助我的人。
我发现了问题,这与我对python的理解无关(很少)。 :p
问题是我编辑了同一个项目的错误分支,Main.py在一个分支,XWinInfos.py在另一个分支。
还是谢谢。
[原问题] 我是一名 Java/PHP/Delphi 程序员,只在破解别人的程序时才使用 Python——从不自己编写复杂的 Python。由于这周我的空闲时间很短,我决定用 Python 写一些非琐事,这就是我的问题
首先我有这样的 python 文件:
src/
main.py
SomeUtils.py
在“SomeUtils.py中,我有几个函数和一个类:
...
def funct1 ...
def funct2 ...
class MyClass1:
__init__(self):
self. ....
...
然后在“main.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:----------------------------- -----------------
谢谢你们。
我认为,发布实际代码可能会更好,所以在这里:
注意:我知道“;”和 "(...)" 但我喜欢这样。
这里是目录结构。 DIRS http://dl.getdropbox.com/u/1961549/images/Python_import_prolem_dir_.png 如您所见,我只是添加了一个空的 init.py,但似乎没有什么不同。
这里是 main.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_ofLine_withPrefix”,可以正常工作。
如果我使用“from XWinInfos import *;”,则会出现错误“NameError: global name 'XWinInfo' is not defined”。
如果我使用“from XWinInfos import XWinInfo;”,则会出现错误“ImportError: cannot import name XWinInfo”。
请帮忙。 提前致谢。
【问题讨论】:
-
该行是否应该读作“from SomeUtils import *”?
-
你能在这里发布实际代码吗?什么是“从 XWinInfos 导入 *”?不应该是“SomeUtils”吗?你的 Python 路径是什么样的? “src/”中是否有“init.py”?而且:Python不需要那些花哨的“;”在每一行的末尾。你应该放弃它们......
-
是的,应该是“SomeUtils”,不,没有init.py。我应该创建它吗?里面应该有什么?
-
也可以为空但必须存在
-
我已经发布了实际代码,请看一下(“EDIT 2”)。