Python 带not None的“return”表达式列表返回“None”

Python 带not None的“return”表达式列表返回“None”,python,return,Python,Return,我目前正在研究XML SVG遍历,下一个问题是: 如果currNode.parentNode是rootNode:,则我的函数始终返回None,不过,正如您在下面的代码中所看到的,我已显式地将return设置为“flag”,这是一个非空字符串。 这里最有趣的部分是打印“…”打印三个点,所以问题就在那里,或者至少看起来是这样的 根据Python文档:“如果存在表达式列表,则对其求值,否则不替换任何表达式。” 简言之,问题是: 为什么“return”不返回“flag”字符串,而是返回“None” 下面

我目前正在研究XML SVG遍历,下一个问题是: 如果currNode.parentNode是rootNode:,则我的函数始终返回None,不过,正如您在下面的代码中所看到的,我已显式地将return设置为“flag”,这是一个非空字符串。 这里最有趣的部分是打印“…”打印三个点,所以问题就在那里,或者至少看起来是这样的

根据Python文档:“如果存在表达式列表,则对其求值,否则不替换任何表达式。”

简言之,问题是: 为什么“return”不返回“flag”字符串,而是返回“None”

下面是一段代码:

根据您的列表,只有一种解释:currNode.nextSibling不是None,或者是,但是currNode.parentNode是rootNode是False。在方法/函数的末尾设置一个默认返回语句来测试:

if currNode.nextSibling is None:
    if currNode.parentNode is rootNode:
        flag = 'end_of_svg'
        print('...')
        return flag
    return 'nested if failed'
return 'currNode.nextSibling is not None!!!'

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

        elif currNode.parentNode.nextSibling is None:
            print('<--')
            currNode = currNode.parentNode
            relsLookup(currNode, rootNode)
你的意思是说:

        elif currNode.parentNode.nextSibling is None:
            print('<--')
            currNode = currNode.parentNode
            return relsLookup(currNode, rootNode)

您看到的核心问题是,一个函数如果从末尾掉下来,即到达代码末尾而没有返回值或引发异常,那么它将隐式地向调用方返回一个值

因此,Daren建议在末尾包含一个显式的返回,以查看发生了什么,aix注意到递归情况,即实际上不返回任何内容


根据代码的结构,递归大小写当前已中断,因为它不会返回值。

如果currNode.parentNode不是rootNode?然后呢?或currNode.nextSibling不是无?然后会发生什么?你能发布整个函数吗?重要的是如果没有输入这个if块会发生什么。最后3行是死代码。值要么为无,要么为非,不存在第三种可能性。如果没有,就写下:。。。else:…。@a.reva:它只是检查。。。在某些情况下,它没有返回语句。为什么在某些情况下它会丢失报税表?为什么有一个逻辑路径缺少返回?@S.Lott:它只是检查父节点是否是“组”,如果是-检查它是否有兄弟节点使其处于活动状态,即currNode。老实说?我不懂编程,所以不能确切地说。。。虽然我不认为它会归还任何东西。只需执行递归。@a.reva:aix是正确的,您需要在那里返回,否则在这种情况下对relsLookup的第一次调用将不返回任何值。@Jochen Ritzel:问题是,在添加return后调用“relsLookup”的函数中有错误。在这两种情况下,我都遗漏了一些东西。…。@a.reva:您到底遇到了哪些错误?你确定你在编辑文件时没有弄乱缩进吗?&约森·里泽尔:好的,现在我明白了,一开始我还没有理解你的答案。。。!因为我没有指定return,所以它没有返回任何值。顺便说一句,检查dict项中的结果而不是索引导致的错误无法选择更好的:tuple或dict,当将消息检查器更改为dict时,错误地将代码与smth分开,如下所示:if msg in EXCEPTIONS:。
        elif currNode.parentNode.nextSibling is None:
            print('<--')
            currNode = currNode.parentNode
            return relsLookup(currNode, rootNode)