Python 具有循环依赖关系的AttributeErrors和NameErrors

Python 具有循环依赖关系的AttributeErrors和NameErrors,python,python-2.7,Python,Python 2.7,我对此做了一些阅读,似乎在不知不觉中实现了称为循环依赖的代码。我正在寻找最简单的解决方法来防止这个问题 我有一个基本上创建目录的脚本,这些目录然后在多个其他脚本中引用,因为该脚本旨在避免硬编码文件路径等等 CaseManager.py import sys, os from os.path import join def mkdir(): conPath = locateTool + locateCase if not os.path.isdir(conPath):

我对此做了一些阅读,似乎在不知不觉中实现了称为循环依赖的代码。我正在寻找最简单的解决方法来防止这个问题

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

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
执行的代码是:

脚本1.py

import CaseManager
import ClusterInfo

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

if __name__ == '__main__':
    main() 
现在我了解到导入CaseManager是一种非常糟糕的做法,每个单独的变量都应该被调用,这可以防止名称空间污染和变量冲突。但在一开始阅读了引用的解决方案后,他们建议不可能使用from x import y,因为在调用它时还没有创建值(当我这样做时,我得到了一个错误,导致我首先阅读了那篇文章)

如何让脚本在没有错误的情况下编译
name错误:全局名称“d5”基本上没有定义

现在,当我在d5前面加上
CaseManager.d5

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

第一件事(尽管还有其他的-您不需要先检查,只要在使用
os.mkdir
(EAFP over LBYL)时尝试创建,并且
exc
esc
作为异常名称不一致)是不是
d5
CaseManager.mkdir
函数的本地功能-因此它无论如何在模块级都不可用…@JonClements我尝试了
CaseManager.mkdir.d5
,但这也不起作用,说该函数是一个错误,而不是模块。如果我删除模块def mkdir并以这种方式调用它会更好吗?好吧-它将不可用-因为它不是函数属性-而是在函数运行时创建的。。。考虑将您的
d
移动到模块级别,然后您可以访问它们