该项目简要介绍了以下结构:
/wmlvalidator.py
/wesnoth/__init__.py
/wesnoth/wmlgrammar.py
/wesnoth/wmlparser.py
/wesnoth/wmldata.py
在/wmlvalidator.py
脚本中,我有:
import wesnoth.wmldata as wmldata
import wesnoth.wmlparser as wmlparser
import wesnoth.wmlgrammar as wmlgrammar
/wesnoth/wmlgrammar.py
脚本只导入Python标准库。
脚本/wesnoth/wmlparser.py
具有:
import os, glob, sys
from . import wmldata
import re
脚本/wesnoth/wmldata.py
具有:
import re, sys
from . import wmlparser
import codecs
脚本/wesnoth/__init__.py
为空。
当我运行/wmlvalidator.py
时,收到以下错误消息:
回溯(最近一次调用最后一次):
File "/home/macabeus/ApenasMeu/pycharm/helpers/pydev/pydevd.py", line 2357, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "/home/macabeus/ApenasMeu/pycharm/helpers/pydev/pydevd.py", line 1777, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/home/macabeus/ApenasMeu/pycharm/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/home/macabeus/ApenasMeu/wesnoth/data/tools/wmlvalidator", line 10, in <module>
import wesnoth.wmldata as wmldata
File "/home/macabeus/ApenasMeu/wesnoth/data/tools/wesnoth/wmldata.py", line 19, in <module>
from . import wmlparser
File "/home/macabeus/ApenasMeu/wesnoth/data/tools/wesnoth/wmlparser.py", line 4, in <module>
from . import wmldata
ImportError: cannot import name 'wmldata'
如何解决这个问题?
答案 0 :(得分:1)
你似乎有一个循环依赖,这从来都不是一件好事。
此循环依赖项是导致此问题的原因,因为首次尝试从wmldata
导入.
时,它会找到行from . import wmlparser
并尝试导入该模块,而在导入.
和wmldata
。
然后,当它尝试导入wmlparser
时,会看到要从wmldata
导入.
的行,但.
尚未导入,因此它不会其中有一个wmldata
,这会导致问题。
解决此问题的方法是将from . import wmldata
中的wmlparser
行更改为 -
import wesnoth.wmldata as wmldata
并导入wmldata
至 -
import wesnoth.wmlparser as wmlparser
这里最好的解决方法是摆脱这种循环依赖,因为可能还有其他问题,因为你没有包含完整的代码所以我看不到。比如,如果wmlparser
正在使用wmldata
中定义的某个名称/变量,那么它会抛出一个错误,该名称尚未定义,因为它尚未定义,当wmldata
尝试时导入wmlparser
。