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'