Python 具有循环依赖关系的AttributeErrors和NameErrors
我对此做了一些阅读,似乎在不知不觉中实现了称为循环依赖的代码。我正在寻找最简单的解决方法来防止这个问题 我有一个基本上创建目录的脚本,这些目录然后在多个其他脚本中引用,因为该脚本旨在避免硬编码文件路径等等 CaseManager.pyPython 具有循环依赖关系的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):
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
移动到模块级别,然后您可以访问它们