带有not-None表达式列表的'return'返回'None'

8da*_*day 0 python return

我目前正在进行XML(SVG)遍历并遇到下一个问题:
我的函数总是在之后返回None if currNode.parentNode is rootNode:,但是,正如您在下面的代码中看到的那样,我已明确设置返回'flag',这是非空字符串.
这里最有趣的部分是print('...')打印三个点,所以问题就在那里(或至少看起来像那样).

根据Python文档:'如果存在表达式列表,则对其进行评估,否则替换为None.'

所以,简而言之,问题是:
为什么'return'不会返回'flag'字符串,而是'None'而不是?

这是这段代码:

def relsLookup(currNode, rootNode):
    if currNode.nextSibling is not None:
        currNode = currNode.nextSibling
        return currNode
    elif currNode.nextSibling is None:
        if currNode.parentNode is rootNode:
            flag = 's2s_exception_end_of_svg'
            print('...')
            return flag
        elif currNode.parentNode.localName == 'g':
            if currNode.parentNode.nextSibling is not None:
                print('<--')
                currNode = currNode.parentNode.nextSibling
                return currNode
            elif currNode.parentNode.nextSibling is None:
                print('<--')
                currNode = currNode.parentNode
                relsLookup(currNode, rootNode)
        else:
            flag = 's2s_exception_unknown_parent'
            return flag
    else:
        flag = 's2s_exception_unknown_sibling'
        return flag

NPE*_*NPE 6

我怀疑问题出在您的代码的以下部分:

        elif currNode.parentNode.nextSibling is None:
            print('<--')
            currNode = currNode.parentNode
            relsLookup(currNode, rootNode)
Run Code Online (Sandbox Code Playgroud)

你的意思是说:

        elif currNode.parentNode.nextSibling is None:
            print('<--')
            currNode = currNode.parentNode
            return relsLookup(currNode, rootNode)
Run Code Online (Sandbox Code Playgroud)

  • @ a.reva:aix是对的,你需要返回那里,否则第一次调用`relsLookup`会返回`None`. (3认同)