คำสั่งส่งคืน Python ไม่แตกสำหรับลูป

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

นี่คือปัญหาคุณกำลังเรียกใช้ฟังก์ชันเดียวกันคือ else statement ดังนั้นหากเข้าสู่บล็อกอื่นก็อาจดำเนินการซ้ำได้ พยายามแก้ไขรหัสของคุณหลีกเลี่ยงการเรียกใช้ฟังก์ชันจากภายใน นอกจากนี้คุณอาจต้องวาง 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'