Exception StopIteration
Pelajaran 3 dari 13 dalam kursus Iterator Python di Coddy.
Pengecualian StopIteration merupakan komponen penting dalam protokol iterator Python. Pengecualian ini menandakan akhir urutan perulangan dan berperan penting dalam mengendalikan perilaku iterator. Mari kita pelajari pengecualian ini dan pentingnya.
Apa itu StopIteration?
StopIteration adalah pengecualian bawaan di Python yang dimunculkan saat iterator kehabisan item, yang berarti tidak ada lagi item yang dapat dikembalikan.
Kapan StopIteration Dimunculkan?
Pengecualian StopIteration secara otomatis dimunculkan oleh Python dalam dua skenario utama:
- Saat fungsi
next()dipanggil pada iterator yang sudah tidak memiliki item lagi. - Saat method
__next__()pada iterator khusus diimplementasikan untuk memunculkanStopIterationdi akhir perulangan.
Contoh StopIteration
Mari kita lihat cara kerja StopIteration dengan iterator sederhana:
my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator)) # output: 1
print(next(my_iterator)) # output: 2
print(next(my_iterator)) # output: 3
print(next(my_iterator)) # Memunculkan StopIteration
Dalam contoh ini, setelah kita mengiterasi semua elemen di my_list, pemanggilan next() berikutnya memunculkan pengecualian StopIteration.
Pentingnya dalam Perilaku Iterator
Pengecualian StopIteration penting karena beberapa alasan:
- Menandakan Akhir: Pengecualian ini memberikan tanda yang jelas bahwa perulangan telah mencapai akhir.
- Mengakhiri for loop:
forloop di Python mengandalkanStopIterationuntuk mengetahui kapan harus berhenti. - Mengendalikan Iterator Khusus: Saat membuat iterator khusus, memunculkan
StopIterationmemungkinkan kamu menentukan kapan perulangan harus berakhir.
Menangani StopIteration
for loop menangani StopIteration secara otomatis. Namun, saat menggunakan next() secara langsung, kamu mungkin ingin menangani pengecualian ini secara eksplisit:
my_iterator = iter([1, 2, 3])
try:
while True:
item = next(my_iterator)
print(item)
except StopIteration:
print("Iteration finished")
Kode ini akan mencetak angka 1, 2, dan 3, lalu "Iteration finished" saat pengecualian StopIteration ditangkap.
Memahami pengecualian StopIteration sangat penting saat bekerja dengan iterator di Python, karena pengecualian ini menyediakan mekanisme standar untuk mengendalikan dan mengakhiri perulangan.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Tantangan
MudahBuat iterator kustom yang menghasilkan urutan bilangan prima hingga batas tertentu. Iterator tersebut harus menggunakan exception StopIteration untuk menandakan akhir urutan saat mencapai atau melewati batas.
Kamu diberikan:
- Bilangan bulat
limitsebagai input
Iterator kamu harus:
- Menghasilkan bilangan prima mulai dari 2
- Memunculkan exception
StopIterationketika bilangan prima berikutnya akan melebihi batas yang diberikan
Implementasikan iterator sebagai class dengan method __iter__() dan __next__(). Gunakan method __next__() untuk menghasilkan bilangan prima berikutnya dan menangani exception StopIteration.
Cetak setiap bilangan prima yang dihasilkan pada baris baru.
Input akan diberikan sebagai string yang mewakili bilangan bulat.
Coba sendiri
# Baca input
limit = int(input())
class PrimeIterator:
def __init__(self, limit):
self.limit = limit
self.current = 2
def __iter__(self):
return self
def __next__(self):
# TODO: Implementasikan logika untuk menghasilkan bilangan prima berikutnya
# Jika bilangan prima berikutnya melebihi limit, munculkan StopIteration
# Kembalikan bilangan prima berikutnya jika tidak melebihi limit
pass
# Buat instance dari PrimeIterator
prime_iter = PrimeIterator(limit)
# Telusuri bilangan prima dan cetak satu per satu
try:
for prime in prime_iter:
print(prime)
except StopIteration:
pass # Akhir iterasiSemua pelajaran di Iterator Python
2Membuat Iterator Kustom
Mengimplementasikan __iter__()Mengimplementasikan __next__()Iterator Tak TerbatasLatihan sendiri: Compiler Python online