【发布时间】:2020-09-15 13:41:23
【问题描述】:
我想遍历一个 XML 结构。我的代码似乎确实有效。我检查了调试器,发现它到达了return,但for 循环仍在继续。
期待您的建议,谢谢!
def get_value(root, item):
for node in root:
if node.tag == item:
return node.tag
else:
get_value(node, item)
return 'Item not found in XML'
【问题讨论】:
-
循环在任何情况下都不会在到达
return后继续。您一定已经看到之前的递归调用完成了。 -
这是不可能的,如果遇到
return语句,您的for循环的进一步迭代将不会执行。请注意,您的函数是递归的,因此在单步调试器时请注意这一点。 -
如果您希望整个递归调用链在
return上退出,请参阅我对this 问题的回答。 -
我们需要minimal reproducible example 来提供帮助。这段代码甚至没有正确缩进。而且还不清楚您期望
else:条件会做什么(您进行递归调用并忽略返回值)。如果您实际到达return,该函数总是立即返回,除非:1) 与return关联的表达式触发异常(例如node没有tag属性)或2) 存在with或try/finally参与,在这种情况下with/finally清理首先发生。为什么你认为循环在return之后继续? -
看起来您可能正在返回对函数的先前调用,因为您似乎正在使用递归。如果函数中的 any 代码从其中返回,则不会在任何情况下继续运行。
标签: python python-3.x