Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Com Libxml2


Ale

Pergunta

Olá povão ! =P vamo ver quem podera ajudar-me.:

estou com problemas na seguinte parte do cdgo de um prog meu:

def parseServers(cur):
	cur = cur.children
	if cur.name == "host1":
  return cur.getContent()
	else:
  print "error: HOST1 não encontrado!"
  sys.exit()
try:
	doc = libxml2.parseFile('./conf/servers.xml')
except:
	print "error: 'servers.xml' não encontrado"
	sys.exit()

if doc == None:
	print "error: Documento 'servers.xml' analisado sem sucesso!"
	doc.freeDoc()
	sys.exit()

cur = doc.getRootElement()

if cur == None:
	print "error: Documento 'servers.xml' vazio."
	doc.freeDoc()
	sys.exit()

cur = cur.children

if cur.name == "hosts":
	server = parseServers(cur)
else:
	print "error: hosts não encontrados!"
	doc.freeDoc()
	sys.exit()
doc.freeDoc()
sendo que o tal servers.xml e isso:
<?xml version="1.0"?>
<servers>
	<hosts>
  <host1>smtp.terra.com.br</host1>
  <host2>smtp.bol.com.br</host2>
  <host3>smtp.ig.com.br</host3>
	</hosts>
</servers>
so q esta acontecendo o seguitne erro(tem de tirar o meu trtamento de excessoes):
Traceback (most recent call last):
  File "./casper_mail.py", line 102, in ?
    server = parseServers(cur)
  File "./casper_mail.py", line 76, in parseServers
    if cur.name == "host1":
AttributeError: 'NoneType' object has no attribute 'name'
algm sabe uq é ? pelo o que percebi o problema é no:
cur.name

ou talvez ate na atribuicao do cur, me baseei num codigo do cookbook da pythonbrasil.com.br... vlw !

Obs.: Quando faco os mesmos procedimentos no shell python da certo ! =\

uso o python 2.3 no Linux, da errado tanto no Debian, qnt no Slack10... vlw...

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

O problema, provavelmente, está aqui:

cur = cur.children
A propriedade children deve estar retornando None. Não disponho da libxml2 aqui para testar, mas creio que children deveria ser um objeto (provavelmente algo como uma lista, dicionário ou mesmo outro objeto composto) para se chegar aos "filhos" do nó principal, certo? Quando você faz no modo interativo, qual o objeto retornado por "cur" após essa linha? Tente fazer um type(cur) ou um repr(cur) para dar uma olhada. EDITADO: Olhando no cookbook percebi que o cur se trata de um gerador e que realmente podem haver objetos retornados como None (assim como acontece com xml.dom.minidom). A solução para isso está lá mesmo:
cur = cur.children
while cur != None:
        if cur.name == "storyinfo":
                parseStory(cur)
        cur = cur.next

Note que a cada nó retornado, testa-se ele não é None e caso positivo é que se olha a propriedade name dele. Você pode utilizar list comprehension para fazer uma lista só com os nós validos (ou seja, todos que *não* são None) ou usar o código acima.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...