Function returns none
Kent Johnson
kent37 at tds.net
Mon Oct 31 14:39:31 EST 2005
noahlt at gmail.com wrote:
> I'm trying to write a website updating script, but when I run the
> script, my function to search the DOM tree returns None instead of what
> it should.
When you call findelement() recursively you have to return the value from the recursive call to the next caller up. See example below.
Kent
>
> I have this program:
> --------
> import sys
> from xml.dom.minidom import parse
>
>
> # search the tree for an element with a particular class
>
> def findelement(current, classtofind, topnode = None):
> if topnode == None: topnode = current
>
>
>
> # if it's an xml element...
> if current.nodeType == 1:
> print current.nodeName, ':', current.getAttribute('class')
> if current.getAttribute('class') == classtofind:
> print 'Returning node:', current
> return current
> elif current.hasChildNodes():
> findelement(current.firstChild, classtofind, topnode)
Should be
return findelement(current.firstChild, classtofind, topnode)
and similarly wherever you call findelement().
> elif current.nextSibling:
> findelement(current.nextSibling, classtofind, topnode)
>
> elif (current.parentNode != topnode) \
>
> and (current.parentNode.nextSibling != None):
>
> findelement(current.parentNode.nextSibling, classtofind,
> topnode)
> else:
>
> print 'Returning None...'
>
> return None
>
> # others (text, comment, etc)
>
> else:
>
> if current.nextSibling:
>
> findelement(current.nextSibling, classtofind, topnode)
>
> elif (current.parentNode != topnode) \
>
> and (current.parentNode.nextSibling != None):
>
> findelement(current.parentNode.nextSibling, classtofind,
> topnode)
> else:
>
> print 'Returning None...'
>
> return None
>
>
>
> # parse the document
>
> blog = parse('/home/noah/dev/blog/template.html')
>
>
>
> # find a post
>
> postexample = findelement(blog.documentElement, 'post')
>
>
>
> print 'Got node: ', postexample
>
> -----
>
> My output is this:
>
> -----
> html :
> head :
> title :
> body :
> h1 :
> ul :
> li :
> h2 :
> ol :
> li : post
> Returning node: <DOM Element: li at -0x48599c74>
> Got node: None
> -----
>
> The function finds the right element fine, and says it will return <DOM
> Element: li at -0x48599c74>, but the program gets None instead. What's
> happening here? Any suggestions?
>
More information about the Python-list
mailing list