Pernyataan return Python tidak merusak loop

Sep 15 2020

Saya ingin mengulang melalui struktur XML. Kode saya sepertinya berfungsi. Saya memeriksa debugger dan melihat bahwa itu mencapai return, tetapi forloop terus berlanjut.

Menantikan saran Anda, terima kasih!

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'

Jawaban

3 Homer Sep 15 2020 at 21:28

Di sini masalahnya adalah, Anda memanggil fungsi yang sama adalah pernyataan lain. Jadi, jika masuk ke blok lain, itu mungkin berlangsung secara rekursif. Cobalah untuk mengubah kode Anda, hindari memanggil fungsi dari dalam. Selain itu, Anda mungkin perlu menempatkan return inside for loop, yang disorot di bawah ini

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

Anda lupa returnpernyataan saat memulai panggilan rekursi. Artinya itu akan berlangsung selamanya sampai batas rekurison maks tercapai atau kehabisan memori.

ubah kode Anda seperti ini

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'