Tôi muốn đọc tối đa 20 dòng từ một tập tin csv:Python: StopIteration ngoại lệ và danh sách comprehensions
rows = [csvreader.next() for i in range(20)]
Hoạt động tốt nếu các tập tin có 20 hoặc nhiều hàng, không thành công với một ngoại lệ StopIteration khác.
Có cách nào thanh lịch để đối phó với một trình lặp có thể ném ngoại lệ StopIteration trong danh sách hiểu hay tôi nên sử dụng vòng lặp thông thường?
Cảm ơn Ayman. Có vẻ như việc hiểu danh sách cần phải được cập nhật để đối phó với StopIteration, phải không? Nó xuất hiện "for" đã được cập nhật để xử lý nó (nó dừng lặp lại khi nó gặp ngoại lệ, ngầm bắt nó), và tôi không thấy lý do rõ ràng cho việc hiểu danh sách không làm như vậy. – Parand
để bắt StopIteration liên quan đến iterable của nó, không cho các đối tượng khác như vậy trong bộ phần mềm của nó. Ví dụ c = iter (phạm vi (5)) for i in range (10): \t in i, c.next() sẽ nâng cao StopIteration ngoại lệ liên quan đến c. – Mapio
Vòng lặp for KHÔNG bắt được StopIteration. Nó chỉ bắt được nó nếu nó được ném bởi phương thức tiếp theo của trình lặp, không phải nếu nó được ném vào thân vòng lặp. Trong câu hỏi của bạn, csvreader.next() tương tự với thân vòng lặp. – Miles