2013-05-15 5 views
1

FIXED: получается, что модуль уже называется парсером. Переименовал его и его работу отлично! Спасибо всем.Исправлено: Python NameError, исправлено AttributeError и получил это?

У меня есть 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: \, потому что это мой личный диск в моей школе.

+0

Я хотел бы зайти в интерпретатор, импортировать парсер, dir (парсер) и посмотреть, импортируете ли вы правильный модуль или импортируете модуль parser std-lib. –

+0

Хорошо. – Tassaris

ответ

0

Если ваш файл действительно называется parser.xml, это ваша проблема. It needs to be parser.py in order to work.

EDIT: Хорошо, поскольку это не ваша проблема, похоже, что у вас проблема с именами. Вы дважды импортируете свой парсерный модуль, когда используете import parser, а затем from parser import *. Первая его форма делает «парсер» пространством имен, а вторая форма напрямую импортирует его, поэтому теоретически вы должны иметь как parser.xmlwrite, так и xmlwrite. Также явно не полезно импортировать minidom в main.py, так как вы не используете какие-либо функции minidom там.

Если вы очистите их и до сих пор проблема, я бы suggest looking at __ init __.py. Если это все равно ничего не делает, это может быть просто конфликт с Python's parser module, вы можете заменить имя, подобное myxmlparser.

+0

Это parser.py, он обращается к файлам XML. – Tassaris

+0

На самом деле все было проще. parser - пакет по умолчанию. Я переименовал его, и он сработал. Но спасибо! – Tassaris