Tôi cố gắng để lặp qua một danh sách, và tôi cần phải thực hiện thao tác cụ thể khi và chỉ khi lặp đi lặp lại đến cuối danh sách, xem ví dụ dưới đây:Duyệt qua danh sách và xử lý StopIteration bằng Python đẹp
data = [1, 2, 3]
data_iter = data.__iter__()
try:
while True:
item = data_iter.next()
try:
do_stuff(item)
break # we just need to do stuff with the first successful item
except:
handle_errors(item) # in case of no success, handle and skip to next item
except StopIteration:
raise Exception("All items weren't successful")
Tôi tin rằng mã này không phải là quá Pythonic, vì vậy tôi đang tìm kiếm một cách tốt hơn. Tôi nghĩ rằng mã lý tưởng sẽ trông giống như đoạn giả định dưới đây:
data = [1, 2, 3]
for item in data:
try:
do_stuff(item)
break # we just need to do stuff with the first successful item
except:
handle_errors(item) # in case of no success, handle and skip to next item
finally:
raise Exception("All items weren't successful")
Bất kỳ suy nghĩ nào đều được hoan nghênh.
thay 'cuối cùng' bằng' else'? – WolframH
Tại sao bạn có ''Tất cả các mục không thành công'' thay vì' "Tất cả các mục không thành công" '? Dấu nháy đơn giữa đó sẽ phá vỡ chuỗi/ngoại lệ của bạn nếu nó chạy. Ngoài ra, đến điểm của WolframH, xem [docs] (http://docs.python.org/reference/compound_stmts.html#for) - 'else' thay vì' finally' sẽ hoạt động. – thegrinner
Điều đáng chú ý là 'ngoại trừ:' là một điều khủng khiếp - nếu nó chỉ là ví dụ, tốt, nhưng trong bất kỳ ví dụ thực sự nào, xin vui lòng chỉ bắt một ngoại lệ cụ thể. –