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

여기서 문제는 동일한 함수 is else 문을 호출한다는 것입니다. 따라서 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'