Menu
CoddyTech

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:

  1. Saat fungsi next() dipanggil pada iterator yang sudah tidak memiliki item lagi.
  2. Saat method __next__() pada iterator khusus diimplementasikan untuk memunculkan StopIteration di 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:

  1. Menandakan Akhir: Pengecualian ini memberikan tanda yang jelas bahwa perulangan telah mencapai akhir.
  2. Mengakhiri for loop: for loop di Python mengandalkan StopIteration untuk mengetahui kapan harus berhenti.
  3. Mengendalikan Iterator Khusus: Saat membuat iterator khusus, memunculkan StopIteration memungkinkan 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.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

challenge icon

Tantangan

Mudah

Buat 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 limit sebagai input

Iterator kamu harus:

  • Menghasilkan bilangan prima mulai dari 2
  • Memunculkan exception StopIteration ketika 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 iterasi

Semua pelajaran di Iterator Python

Latihan sendiri: Compiler Python online