1

修正済み: 既に parser と呼ばれるモジュールがあることが判明しました。名前を変更し、正常に動作しました!皆さんありがとう。

理解できない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...")

パーサー.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:\ です。学校の個人用ドライブだからです。

4

1 に答える 1

0

ファイルが実際に parser.xml と呼ばれている場合、それが問題です。動作させるには parser.py である必要があります

編集:さて、それはあなたの問題ではなかったので、名前空間の問題があるようです。import parserと を使用すると、パーサー モジュールを 2 回インポートしますfrom parser import *。最初の形式は「パーサー」を名前空間にし、2 番目の形式はそれを直接インポートするため、理論的には、スコープ内にparser.xmlwriteとの両方が必要です。xmlwriteminidom 機能を使用しないため、main.py に minidom をインポートすることも明らかに役に立ちません。

これらを解決しても問題が解決しない場合は、 __ init __.py を確認することをお勧めします。それでも何も起こらない場合は、単にPython のパーサー モジュールと競合している可能性があります。myxmlparser のような名前に置き換えることができます。

于 2013-05-15T14:30:32.753 に答える