我在输入自制模块时遇到了一些麻烦,我只是看不出我做错了什么。
我有一个名为basics的包,它包含我的所有基类 我有一个名为components的第二个包,组件中的每个模块都使用基础模块。 我有一个脚本文件,位于另一个文件夹中,该文件调用基础和组件模块。
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "H:/scripts/CIF_utilities/scripts/hello world.py", line 11, in <module>
TW=TextWriter(r'H:/scripts/CIF_utilities/components')
File "H:\scripts\CIF_utilities\components\textwriter.py", line 23, in __init__
layout=Layout(File=os.path.join(path,'alphabet.CIF'))
NameError: global name 'Layout' is not defined
我的脚本是:hello world.py
#hello world.py
import basics
from components.textwriter import *
TW=TextWriter(r'H:/scripts/CIF_utilities/components')
cell=TW.writeText('Hello World',30e3)
cell.draw()
layout=Layout()
layout.addCell(cell)
layout.workCell=cell
layout.exportCIF('hello world',os.getcwd())
textwriter.py是给出错误的那个。在 init 中,我使用Layout类从预先格式化的文件加载一些数据(将导入) 在textwriter.py中
#texwriter.py
import basics
import os, os.path, sys
import re
from numpy import *
from scipy import *
class TextWriter:
def __init__(self,pathToCIF=None):
if pathToCIF==None:
path=os.path.split(textwriter.__file__)[0]
else:
path=pathToCIF
###line that crashes is here
layout=Layout(File=os.path.join(path,'alphabet.CIF'))
self.alphabet=layout.workCell
有layout.py类:
#layout.py
import basics
from numpy import *
from scipy import *
import Tkinter
import tkFileDialog
import os, os.path
import re
import datetime
class Layout:
countCell=0
@classmethod
def getNewNumber(self):
Layout.countCell+=1
return Layout.countCell
def __init__(self,File=None):
self.cellList=[]
self.layerList=[]
self.nameFile=""
self.comments=""
self.workCell=None
if File!=None:
self.importCIF(File)
基础包的 init .py包含所有必要的输入:
#__init__.py in basics folder
from baseElt import *
from cell import *
from layout import *
from transformation import *
来自组件的 init .py为空
我目前正在使用anaconda 64bits发行版(如果我记得好的话,则是python 2.7)
感谢您的急需!
答案 0 :(得分:1)
自Layout
导入basics/__init__.py
后,它仅存在于basics
命名空间中,而不存在于helloworld.py
中。使用
layout = basics.Layout()
或使用
将Layout
明确导入helloworld.py
from basics import Layout
答案 1 :(得分:0)
在textwriter.py中,您要切换
layout=Layout(File=os.path.join(path,'alphabet.CIF'))
的
layout=basics.Layout(File=os.path.join(path,'alphabet.CIF'))
您的代码可能遇到类似的问题。值得注意的是,使用
并不是pythonicfrom package import *
建议改为使用
from package_or_module import specific_item
import package_or_module
请记住,如果您使用常规import
导入,则必须使用模块/包名称来访问所需的对象(即basics.Layout
)。