具有循环依赖性的AttributeErrors和NameErrors

时间:2016-04-02 13:21:22

标签: python python-2.7

我已经对此进行了一些阅读,看起来我已经在不知不觉中实现了被称为循环依赖的代码。我正在寻找最简单的方法来防止这个问题。

ImportError: Cannot import name X

我有一个基本上创建目录的脚本,然后在多个其他脚本中引用这些目录,因为脚本旨在避免文件路径的硬编码等等。

CaseManager.py

import sys, os
from os.path import join

def mkdir():
    conPath = locateTool + locateCase
    if not os.path.isdir(conPath):
        try:
            os.mkdir(conPath)
        except OSError as exc:
            if exc.errno != errno.EEXIST:
                raise    

    d1 = conPath + '/LiveAcquisition/'
    if not os.path.isdir(d1):
        try:
            os.mkdir(d1)
        except OSError as exc:
            if exc.errno != errno.EEXIST:
                raise

    d5 = d1 + '/Filepaths/'
    if not os.path.isdir(d5):
        try:
            os.mkdir(d5)
        except OSError as esc:
            if exc.errno != errno.EEXIST:
                raise

令人讨厌的代码片段是

ClusterInfo.py

import CaseManager

with open(d5 + '/Objects', 'a') as f:
    f.write(object_path)
f.closed

执行的代码是:

Script1.py

import CaseManager
import ClusterInfo

def main():
    CaseManager.mkdir()
    CaseManager.main()
    ClusterInfo.main()

if __name__ == '__main__':
    main() 

现在我明白导入CaseManager是非常糟糕的做法,并且应该调用每个单独的变量,这样可以防止命名空间的污染和碰撞变量。但是在开始阅读引用的解决方案后,他们建议不能使用x import y,因为在调用它时尚未创建该值(当我这样做时,我得到了一个错误导致我首先阅读那篇文章)

如何在没有错误的情况下编译脚本 NameError: global name 'd5' is not defined essentially

现在,当我使用CaseManager.d5添加d5时,我得到了

AttributeError: 'module' object has no attribute 'd5'

0 个答案:

没有答案