Function returns none
Carsten Haese
carsten at uniqsys.com
Mon Oct 31 14:29:08 EST 2005
On Mon, 2005-10-31 at 14:12, 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.
>
> 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)
> 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?
You have a lot of cases where findelement is called recursively and then
its return value is discarded instead of being turned into a return
value to the caller. In those cases, execution simply falls off the end
of the function and None is returned implicitly (and silently, since you
don't have a print "Returning None" at the end of the function).
HTH,
Carsten.
More information about the Python-list
mailing list