Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的导入问题_Python_Import - Fatal编程技术网

Python中的导入问题

Python中的导入问题,python,import,Python,Import,[闭幕词] 谢谢你们每个试图帮助我的人 我发现了这个问题,这与我对python的理解无关(这一点很小)p 问题是我编辑了同一项目的错误分支,一个分支中的Main.py和另一个分支中的XWinInfos.py 无论如何,谢谢你 [原问题] 我是一名Java/PHP/Delphi程序员,只有在破解别人的程序时才使用Python——我自己从来没有编写过复杂的Python。由于本周我有很短的空闲时间,我决定用Python编写一些非琐碎的东西,这就是我的问题 首先,我有如下python文件: src/

[闭幕词] 谢谢你们每个试图帮助我的人

我发现了这个问题,这与我对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:----------------------------------------------------------

谢谢你们

我认为,发布实际代码可能会更好,因此如下所示:

注:我知道“;”和“(…”),但我喜欢这样

这是dir结构。 如您所见,我只是添加了一个空的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_of line_with prefix”,该函数工作正常

如果使用“from XWinInfos import*;”,则错误为“NameError:未定义全局名称‘XWinInfo’”

如果使用“from XWinInfos import XWinInfo;”,则错误为“ImportError:无法导入名称XWinInfo”

请帮忙。
提前感谢。

您为什么要从
XWinInfos
导入?您应该从
某些工具导入
。更不用说
*
风格的导入是不受欢迎的

编辑:您的错误

ImportError:无法导入名称MyClass1

基本上告诉您在
SomeUtils
中没有定义
MyClass1
。这可能是因为您在系统路径上的某个位置有另一个
SomeUtils.py
文件,而该文件正被导入。如果该文件没有
MyClass1
,则会出现此错误


再次说明:你的class
MyClass1
是否存在无关紧要。可能的情况是,你的系统上有另一个
XWinInfos.p(y | o | w)
并且它正在被导入。否则:norepro你可能需要重写main.py如下:

import SomeUtils as util

def main():
    util.funct1()               # Use funct1   without problem;
    aMyObj1 = util.MyClass1()   # Use MyClass1 with error

if __name__ == "__main__":
    main()
以下是一些简要说明:

  • 中不需要分号 Python,除非您有多个 行上的语句
  • 没有必要 将条件测试包装到 除分组外的括号
  • 来自
    不鼓励模块导入*
    ,因为它 污染全局命名空间
  • 我想你是说

    from SomeUtils import *
    
    但是,这不会触发我的错误。这对我来说很好:

    SomeUtils.py

    def funct1():
        print 4
    
    class MyClass1:
        def __init__(self):
            print 8
    
    main.py

    from SomeUtils import *
    
    def main():
        funct1()               # Use funct1   without problem;
        aMyObj1 = MyClass1()   # Use MyClass1 without error
    
    if (__name__ == "__main__"):
        main()
    

    嗯……在你的例子中有几个输入错误,所以我想知道你的实际代码是否也有一些输入错误。这是一个快速测试的完整源代码,它运行良好,没有导入错误

    SomeUtils.py:

    def funct1():
        print('Function 1')
    
    def funct2():
        print('Function 2')
    
    class MyClass1(object):
        def __init__(self):
            print('MyClass')
    
    main.py:

    from SomeUtils import *
    
    def main():
        funct1()
        aObj = MyClass1()
    
    if (__name__ == "__main__"):
        main()
    
    [根据OP附加信息进行编辑]

    我仍然无法重新创建相同的错误,但您发布的代码在XWinInfox.pyinit方法中至少有两个错误的情况下最初无法工作:

    self.WinID = pWinID #change to 'aWinID' since pWinID is not defined
    self.Title = GetWindowTitle(pWinID)  #change to 'aWinID'since pWinID is not defined
    
    因此,更正后的版本应为:

    self.WinID = aWinID
    self.Title = GetWindowTitle(aWinID)
    
    此外,您的init文件名中有一个输入错误,“init”字前后应该有两个下划线。现在您有
    “\uuuu init\uuuuy”
    ,它应该是
    ”\uuuu init\uuuuuuy'
    ,但这不会阻止代码正常工作


    因为我没有RegExUtils.py代码,所以我只是剔除了依赖于该文件的方法。有了这些剔除的方法并纠正了前面提到的错误,您发布的代码现在就可以正常工作了。

    您的问题自然会与许多旧问题联系在一起。
    请看,仅供参考,并且

    那一行应该是“from SomeUtils import*”?您能在这里发布实际代码吗?什么是“from XWinInfos import*”?不应该是“SomeUtils”?您的Python路径是什么样的?在“src/”中是否有一个“init.py”?并且:Python不需要那些花哨的“;“在每一行的末尾。您应该删除它们……是的。”SomeUtils“不,没有init.py。我应该创建它吗?它里面应该是什么?它也可以是空的,但它必须存在。我已经发布了实际的代码,请查看(“编辑2”)。感谢您的发布。XWinInfos是一个键入错误,因此应该是SomeUtils。问题仍然存在,并显示相同的错误消息。编辑后:再次感谢。我确信MyClass1存在(复制粘贴)。如果它导入另一个模块,funct1如何工作。您对我的mis类型的看法是正确的,但我确实对该类有问题。很抱歉键入错误,我更改了名称以分散实际问题的注意力(但这里似乎是个错误)。无论如何,当我将导入部分更改为:“from SomeUtils import funct1”和我有一个错误“ImportError:无法导入名称MyClass1”。与这个问题完全无关