Có một cách rất Pythonic để viết biểu thức đó mà không viết rõ ràng một khối thử ngoại trừ cho một StopIteration
:
# some_iterable is some collection that can be iterated over
# e.g., a list, sequence, dict, set, itertools.combination(...)
for value in some_iterable:
print(value)
Bạn có thể đọc các PEP liên quan 234 255 nếu bạn muốn biết thêm về lý do tại sao StopIteration
được giới thiệu và logic đằng sau các trình vòng lặp.
Một nguyên tắc chung trong python là có một cách để làm một cái gì đó (xem import this
), và tốt nhất là nó đẹp, rõ ràng, dễ đọc và đơn giản, mà phương pháp pythonic đáp ứng. Mã tương đương của bạn chỉ cần thiết vì python không cung cấp cho iterators một hasNext
hàm thành viên; thích mọi người chỉ cần lặp qua các vòng lặp trực tiếp (và nếu bạn cần làm gì khác chỉ cần thử đọc nó và bắt một ngoại lệ).
Việc tự động bắt một StopIteration
ngoại lệ ở phần cuối của một trình vòng lặp có ý nghĩa và là một sự tương tự của việc EOFError
nêu ra nếu bạn đọc qua phần cuối của tệp.