Pythonのreturnステートメントはforループを壊しません

Sep 15 2020

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'

回答

3 Homer Sep 15 2020 at 21:28

ここでの問題は、同じ関数iselseステートメントを呼び出していることです。したがって、elseブロックに入ると、再帰的に続行する可能性があります。内部から関数を呼び出さないように、コードを修正してください。また、以下で強調表示されているforループ内にreturnを配置する必要がある場合もあります。

def get_value(root, item):
    for node in root:
        if node.tag == item:
            return node.tag
        else:
            get_value(node, item) ---> This is the problem
        return 'Item not found in XML'
3 DevCl9 Sep 15 2020 at 21:43

return再帰呼び出しを開始したときにステートメントを忘れました。つまり、最大再帰制限に達するか、メモリが不足するまで、永久に継続します。

このようにコードを変更します

def get_value(root, item):
    for node in root:
        if node.tag == item:
            return node.tag
        else:
            return get_value(node, item)
    return 'Item not found in XML'