【问题标题】:Fixed: Python NameError, fixed AttributeError and got this?修复:Python NameError,修复了 AttributeError 并得到了这个?
【发布时间】:2013-05-15 14:24:29
【问题描述】:

FIXED:原来有一个模块已经称为解析器。重命名它并且它工作正常!谢谢大家。

我得到了一个我无法弄清楚的python NameError,在AttributeError之后得到它。我已经尝试了我所知道的,无法想出任何东西。

main.py:

from random import *
from xml.dom import minidom
import parser
from parser import *
print("+---+ Roleplay Stat Reader +---+")
print("Load previous DAT file, or create new one (new/load file)")
IN=input()
splt = IN.split(' ')
if splt[0]=="new":
    xmlwrite(splt[1])
else:
    if len(splt[1])<2:
        print("err")
    else:
        xmlread(splt[1])
ex=input("Press ENTER to Exit...")

parser.py:

from xml.dom import minidom
from random import *
def xmlread(doc):
    xmldoc = minidom.parse(doc)
    itemlist = xmldoc.getElementsByTagName('item')
    for s in itemlist:
            print(s.attributes['name'].value,":",s.attributes['value'].value)

def xmlwrite(doc):
    print("no")

无论我得到什么错误:

Traceback (most recent call last):
  File "K:\Python Programs\Stat Reader\main.py", line 10, in <module>
    xmlwrite.xmlwrite(splt[1])
NameError: name 'xmlread' is not defined

尝试访问 xmlwrite 时也会出现同样的错误。

当我将 xmlread 和 xmlwrite 更改为 parser.xmlread 和 parser.xmlwrite 时,我得到:

Traceback (most recent call last):
  File "K:\Python Programs\Stat Reader\main.py", line 15, in <module>
    parser.xmlread(splt[1])
AttributeError: 'module' object has no attribute 'xmlread'

驱动器是 K:\,因为它是我在学校的个人驱动器。

【问题讨论】:

  • 我会进入解释器,导入解析器,dir(parser),看看你是在导入正确的模块还是在导入std-lib解析器模块。

标签: python xml python-3.x nameerror attributeerror


【解决方案1】:

如果你的文件真的叫做 parser.xml,那是你的问题。 It needs to be parser.py in order to work.

编辑:好的,既然这不是你的问题,看起来你有一个命名空间问题。当您使用import parserfrom parser import * 时,您两次导入解析器模块。它的第一种形式使“解析器”成为命名空间,而第二种形式直接导入它,因此理论上,您应该在范围内同时拥有 parser.xmlwritexmlwrite。在 main.py 中导入 minidom 显然也没有用,因为您没有在其中使用任何 minidom 功能。

如果您解决了这些问题但仍然有问题,我会suggest looking at __ init __.py。如果这仍然不起作用,它可能只是与Python's parser module 发生冲突,您可以替换为 myxmlparser 之类的名称。

【讨论】:

  • 它是parser.py,它访问XML文件。
  • 其实更简单。 parser 是一个默认包。我重命名它并且它工作。不过谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-04-06
  • 2012-04-05
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
相关资源
最近更新 更多