Câu lệnh trả về trong Python không phá vỡ vòng lặp for
Sep 15 2020
Tôi muốn lặp lại qua một cấu trúc XML. Mã của tôi dường như hoạt động. Tôi đã kiểm tra trình gỡ lỗi và thấy rằng nó đạt đến return, nhưng forvòng lặp vẫn tiếp tục.
Mong được các bạn tư vấn, xin cảm ơn!
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'
Trả lời
3 Homer Sep 15 2020 at 21:28
Vấn đề ở đây là, bạn đang gọi hàm tương tự là câu lệnh else. Vì vậy, nếu nó nhập vào khối khác, nó có thể tiếp tục đệ quy. Cố gắng sửa đổi mã của bạn, tránh gọi hàm từ bên trong. Ngoài ra, bạn có thể cần đặt return bên trong vòng lặp for, được đánh dấu bên dưới
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
Bạn đã quên một returncâu lệnh ngay khi bắt đầu cuộc gọi đệ quy. Có nghĩa là nó sẽ tiếp diễn mãi mãi cho đến khi đạt đến giới hạn thu hồi tối đa hoặc hết bộ nhớ.
thay đổi mã của bạn như thế này
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'