【问题标题】:Each type of import module have a error每种类型的导入模块都有错误
【发布时间】:2013-09-16 02:35:34
【问题描述】:

我有两行代码:

import  ui.interface.interface
obj = ui.interface.interface.InterfaceCodes()

我在另一个包中有相同的代码并且工作正常。但我得到以下回溯:

Traceback (most recent call last):
  File "./main.py", line 31, in <module>
    from materials.materials import *
  File "/home/mohsen/codes/amlak/amlak/src/materials/materials.py", line
40, in <module>
    from  ui.interface.interface import *  
  File "/home/mohsen/codes/amlak/amlak/src/ui/interface/interface.py",
line 32, in <module>
    from ui.materialsFrame import *
  File "/home/mohsen/codes/amlak/amlak/src/ui/materialsFrame.py", line
24, in <module>
    from ui.materialsFindFrame import *
  File "/home/mohsen/codes/amlak/amlak/src/ui/materialsFindFrame.py",
line 14, in <module>
    from common.objects.objects import *
  File "/home/mohsen/codes/amlak/amlak/src/common/objects/objects.py",
line 28, in <module>
    obj = ui.interface.interface.InterfaceCodes()
AttributeError: 'module' object has no attribute 'interface'

当我将我的代码更改为:

from  ui.interface.interface import *
obj = ui.interface.interface.InterfaceCodes()

我明白了:

Traceback (most recent call last):
  File "./main.py", line 31, in <module>
    from materials.materials import *
  File "/home/mohsen/codes/amlak/amlak/src/materials/materials.py", line
40, in <module>
    from  ui.interface.interface import *  
  File "/home/mohsen/codes/amlak/amlak/src/ui/interface/interface.py",
line 32, in <module>
    from ui.materialsFrame import *
  File "/home/mohsen/codes/amlak/amlak/src/ui/materialsFrame.py", line
24, in <module>
    from ui.materialsFindFrame import *
  File "/home/mohsen/codes/amlak/amlak/src/ui/materialsFindFrame.py",
line 14, in <module>
    from common.objects.objects import *
  File "/home/mohsen/codes/amlak/amlak/src/common/objects/objects.py",
line 28, in <module>
    Obj = ui.interface.interface.InterfaceCodes()
NameError: name 'ui' is not defined

另外,如果我删除“ui.interface.interface”,我会得到:

Traceback (most recent call last):
  File "./main.py", line 31, in <module>
    from materials.materials import *
  File "/home/mohsen/codes/amlak/amlak/src/materials/materials.py", line
40, in <module>
    from  ui.interface.interface import *  
  File "/home/mohsen/codes/amlak/amlak/src/ui/interface/interface.py",
line 32, in <module>
    from ui.materialsFrame import *
  File "/home/mohsen/codes/amlak/amlak/src/ui/materialsFrame.py", line
24, in <module>
    from ui.materialsFindFrame import *
  File "/home/mohsen/codes/amlak/amlak/src/ui/materialsFindFrame.py",
line 14, in <module>
    from common.objects.objects import *
  File "/home/mohsen/codes/amlak/amlak/src/common/objects/objects.py",
line 28, in <module>
    Obj = InterfaceCodes()
NameError: name 'InterfaceCodes' is not defined

我的问题是,我真的不知道该怎么办......!

【问题讨论】:

    标签: python import module


    【解决方案1】:

    您似乎遇到了循环导入问题。从您的第一个堆栈跟踪来看,

    • ui.interface.interface 导入 ui.materialsFrame
    • ui.materialsFrame 导入 ui.materialsFindFrame
    • ui.materialsFindFrame 导入 common.objects.objects
    • common.objects.objects 导入 ui.interface.interface

    ...已经在导入过程中。由于ui.interface.interface 一开始就尝试导入ui.materialsFrame,在最后一次导入时,它的变量中还没有InterfaceCodes,这就是你得到AttributeError的原因。

    尝试重新设计您的库以摆脱此循环,或者至少尝试在导入时不实际调用函数/构造函数。

    【讨论】:

    • 我认为python 解决了这个问题,只是C/C++include files 中遇到了这个问题。谢谢...!
    • 在不改变拱门的情况下,您还有其他解决方案吗?
    • 我上一句说过,如果只在根级别定义类和函数,循环导入是没有问题的,因为函数/方法内部的名称会在运行时解析,而不是在进口时。用任何语言你都无法真正获得更多。
    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2020-06-28
    • 2017-01-15
    • 2018-02-22
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多