Pendamping Bab 15: Menangani Error dengan try dan except. Gunakan nomor contoh dan latihan yang sama dengan buku.
Tujuan Belajar
- Mengenali exception dan membaca pesannya.
- Menangani error yang diperkirakan secara spesifik.
- Membedakan peran else dan finally.
Persiapan
Kamu sudah memahami fungsi, input, dan file. Jalankan contoh dengan data valid serta data yang sengaja salah untuk memeriksa setiap jalur penanganan.
Program dengan tombol Coba di IDE dapat dijalankan di browser. Untuk program lokal, unduh sumber, ekstrak ZIP, lalu ikuti README.txt.
Pembahasan
15-01 – Struktur Dasar `try` dan `except`
Struktur try dan except adalah fondasi utama dalam menangani error di Python. Cara kerjanya sederhana.
Coba di IDE Unduh Sumbertry:
# Code yang mungkin menimbulkan error kita letakkan di sini
angka_pembilang = 10
angka_penyebut = 0 # Ini akan menyebabkan error!
hasil = angka_pembilang / angka_penyebut
# Baris berikut tidak akan dijalankan
print("Hasil pembagian:", hasil)
except:
# Code ini akan dijalankan jika terjadi error di blok try
print("Oops! Terjadi kesalahan dalam perhitungan.")
print("Program selesai atau melanjutkan tugas lain...")
Hasil yang diharapkan:
Oops! Terjadi kesalahan dalam perhitungan.
Program selesai atau melanjutkan tugas lain...Coba ubah: Ubah satu nilai pada contoh, lalu jelaskan pengaruhnya terhadap hasil.
15-02 – Mengakses Pesan Error
Kadang, kita ingin tahu lebih detail tentang error yang terjadi. Kita bisa menangkap objek exception itu sendiri dan menampilkan pesannya.
Coba di IDE Unduh Sumbertry:
x = int("bukan_angka")
# 'e' menyimpan objek error
except ValueError as e:
print("Terjadi ValueError!")
print(f"Pesan error aslinya: {e}")
print(f"Tipe errornya: {type(e)}")
Hasil yang diharapkan:
Terjadi ValueError!
Pesan error aslinya: invalid literal for int() with base 10: 'bukan_angka'
Tipe errornya: <class 'ValueError'>Coba ubah: Ubah satu nilai pada contoh, lalu jelaskan pengaruhnya terhadap hasil.
Studi Kasus
15-03 – Pembagian dengan pesan yang jelas
Dua jenis exception mempunyai pesan berbeda. else menampilkan hasil ketika perhitungan berhasil. finally menutup sesi pemeriksaan.
Coba di IDE Unduh SumberMasukan uji, berurutan: '12', '3'.
try:
pembilang = float(input("Pembilang: "))
penyebut = float(input("Penyebut: "))
hasil = pembilang / penyebut
except ValueError:
print("Masukan harus berupa angka.")
except ZeroDivisionError:
print("Penyebut tidak boleh nol.")
else:
print(f"Hasil: {hasil}")
finally:
print("Pemeriksaan selesai.")
Hasil yang diharapkan:
Pembilang: Penyebut: Hasil: 4.0
Pemeriksaan selesai.Coba ubah: Coba teks abc atau penyebut nol untuk memeriksa kedua except.
Rangkuman
try menjalankan pekerjaan yang dapat menimbulkan exception. except menangani jenis yang sesuai; else berjalan jika try selesai tanpa exception; finally menjalankan pembersihan saat alur meninggalkan blok.
Cek Pemahaman
Lima pertanyaan ini sama dengan pertanyaan di buku. Periksa jawaban di kuis untuk melihat skor dan pembahasan.
- Blok untuk menangani exception yang cocok adalah …
- int("abc") biasanya menimbulkan …
- Pembagian bilangan dengan nol menimbulkan …
- Kapan else pada try dijalankan?
- Mengapa memilih jenis exception yang spesifik?
Latihan Mandiri
Latihan 15-L01 – Konversi gagal
Dasar. Tangani int("abc") dan tampilkan Angka tidak valid.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
Angka tidak valid
Lihat Petunjuk
Letakkan konversi di dalam try.
Lihat Solusi
teks = "abc"
try:
angka = int(teks)
except ValueError:
print("Angka tidak valid")
except ValueError memberikan respons untuk masukan yang tidak sesuai.
Coba Solusi di IDEUnduh SolusiLatihan 15-L02 – Pembagian aman
Penerapan. Hitung 10 dibagi penyebut 0. Tangani error dengan pesan Tidak bisa dibagi nol.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
Tidak bisa dibagi nol
Lihat Petunjuk
Tangani ZeroDivisionError.
Lihat Solusi
penyebut = 0
try:
print(10 / penyebut)
except ZeroDivisionError:
print("Tidak bisa dibagi nol")
Program tetap dapat menjelaskan masalah tanpa traceback untuk kondisi yang diperkirakan.
Coba Solusi di IDEUnduh SolusiLatihan 15-L03 – Alur berhasil
Pengembangan. Konversi "12". Jika berhasil, cetak Angka: 12 dari else. Cetak Pemeriksaan selesai dari finally.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
Angka: 12
Pemeriksaan selesai
Lihat Petunjuk
Tugas setelah konversi berhasil berada di else.
Lihat Solusi
teks = "12"
try:
angka = int(teks)
except ValueError:
print("Angka tidak valid")
else:
print(f"Angka: {angka}")
finally:
print("Pemeriksaan selesai")
finally tetap dijalankan pada alur biasa saat meninggalkan blok.
Coba Solusi di IDEUnduh SolusiPengembangan
Kegiatan Tambahan
Saatnya menguji pemahamanmu! Cobalah kerjakan latihan ini sendiri sebelum mengintip solusinya.
- Kalkulator Usia Hewan Peliharaan (Anti Error) Buat
program yang meminta pengguna memasukkan usia hewan peliharaan mereka
dalam tahun. Program kemudian akan mencoba mengonversi usia tersebut ke
“usia manusia” dengan mengalikannya dengan 7 (ini hanya penyederhanaan,
ya!).
- Tangani jika pengguna memasukkan sesuatu yang bukan angka (misalnya “lima”). Beri pesan error yang ramah.
- Jika input valid, tampilkan hasilnya.
- Gunakan blok
elseuntuk menampilkan hasil jika konversi berhasil. - Gunakan blok
finallyuntuk selalu mengucapkan “Terima kasih telah peduli pada hewanmu!”
- Pembaca File Puisi (Anti Panik) Buat program yang
meminta nama sebuah file dari pengguna. Program akan mencoba membuka dan
membaca isi file tersebut, lalu menampilkannya.
- Tangani jika file yang dimasukkan pengguna tidak ada
(
FileNotFoundError). Beri pesan bahwa file tidak ditemukan. - Tangani juga error umum lainnya yang mungkin terjadi saat membaca
file (gunakan
except Exception as e:). - Jika file berhasil dibaca, tampilkan isinya.
- Pastikan file selalu ditutup (jika berhasil dibuka) menggunakan blok
finally.
- Tangani jika file yang dimasukkan pengguna tidak ada
(
- Akses Indeks List Aman Buat sebuah list berisi
beberapa nama buah, misalnya
buah = ["apel", "mangga", "jeruk", "pisang"]. Minta pengguna memasukkan indeks (angka) untuk melihat buah pada posisi tersebut.- Tangani jika input pengguna bukan angka
(
ValueError). - Tangani jika indeks yang dimasukkan berada di luar jangkauan list
(
IndexError). - Jika input valid dan indeks ada dalam jangkauan, tampilkan nama buahnya.
- Gunakan
elseuntuk menampilkan buah jika berhasil. - Gunakan
finallyuntuk menampilkan pesan “Pengecekan buah selesai.”
- Tangani jika input pengguna bukan angka
(
Petunjuk dan Solusi Pengembangan
Solusi Latihan
Solusi 1: Kalkulator Usia Hewan Peliharaan
#### File: solusi_usia_hewan.py
def hitung_usia_hewan_versi_manusia():
print("--- Kalkulator Usia Hewan (Versi Manusia Sederhana) ---")
try:
prompt = "Masukkan usia hewan (tahun, angka): "
usia_hewan_str = input(prompt)
usia_hewan_thn = int(usia_hewan_str)
# Potensi ValueError
if usia_hewan_thn < 0:
# Bisa raise error atau tangani dengan if
print("Usia hewan tidak boleh negatif, dong!")
# Untuk kesederhanaan, pakai print saja
usia_manusia = "Tidak valid (usia negatif)"
else:
usia_manusia = usia_hewan_thn * 7
except ValueError:
print("\\nOops! Kamu harus memasukkan usia")
print("dalam bentuk ANGKA.")
usia_manusia = "Tidak dapat dihitung (input salah)"
else:
# Hanya jalan jika tidak ada ValueError
# Cek apakah usia_manusia adalah angka
is_number = isinstance(usia_manusia, (int, float))
if is_number:
print(f"\\nJika hewanmu berusia {usia_hewan_thn} thn,")
print(f"setara {usia_manusia} thn usia manusia.")
# Jika usia_manusia adalah string "Tidak valid...",
# else ini tetap jalan, tapi kita tidak print
# pesan sukses konversi.
finally:
print("\\nTerima kasih telah peduli pada hewanmu!")
if __name__ == "__main__":
hitung_usia_hewan_versi_manusia()
Solusi 2: Pembaca File Puisi
#### File: solusi_pembaca_puisi.py
def baca_file_puisi():
print("--- Pembaca File Puisi ---")
file_obj = None
# Inisialisasi agar bisa dicek di finally
try:
prompt = "Masukkan nama file puisi (misal: puisi.txt): "
nama_file = input(prompt)
# Buat file dummy 'puisi.txt' untuk pengujian:
# Isi puisi.txt:
# Di bawah langit biru,
# Angin berbisik merdu.
file_obj = open(nama_file, "r", encoding="utf-8")
print(f"\\n--- Isi dari {nama_file} ---")
isi = file_obj.read()
if isi:
print(isi)
else:
print("(File kosong)")
print("--- Selesai membaca ---")
except FileNotFoundError:
print(f"\\nMaaf, file '{nama_file}' tidak ditemukan.")
print("Pastikan nama file benar dan ada di direktori.")
# Menangkap error lain saat membuka atau membaca
except Exception as e:
print(f"\\nTerjadi kesalahan saat membaca file: {e}")
finally:
if file_obj and not file_obj.closed:
file_obj.close()
print("(File ditutup di finally)")
print("\\nTerima kasih sudah menggunakan")
print("Pembaca File Puisi!")
if __name__ == "__main__":
# Untuk mencoba, buat file bernama "puisi.txt"
# di folder yang sama dengan script ini.
# Isi file dengan beberapa baris puisi.
# Contoh isi "puisi.txt":
# Di atas awan, ku melayang,
# Melihat dunia, begitu terang.
baca_file_puisi()
Catatan untuk Solusi 2: Contoh ini sengaja memakai
open() dan close() manual agar peran
finally terlihat jelas. Dalam proyek nyata,
with open(...) biasanya lebih disarankan karena file
otomatis ditutup.
Solusi 3: Akses Indeks List Aman
#### File: solusi_akses_list.py
def akses_buah_dari_list():
buah = ["apel", "mangga", "jeruk", "pisang",
"semangka", "durian"]
print("--- Pilih Buah Favoritmu dari List ---")
print(f"Daftar buah yang tersedia: {buah}")
try:
max_idx = len(buah) - 1
prompt = f"Masukkan nomor urut (0-{max_idx}): "
indeks_str = input(prompt)
indeks_int = int(indeks_str)
# Potensi ValueError
if indeks_int < 0:
raise IndexError
buah_pilihan = buah[indeks_int]
# Potensi IndexError
except ValueError:
print("\\nInput salah! Kamu harus memasukkan")
print("nomor (angka) sebagai indeks.")
except IndexError:
print(f"\\nNomor urut {indeks_int} tidak ada dalam daftar!")
print(f"Pilih nomor antara 0 dan {len(buah) - 1}.")
except Exception as e:
print(f"\\nTerjadi error tak terduga: {e}")
else:
# Hanya jalan jika tidak ada error
print(f"\\nSelamat! Kamu memilih: {buah_pilihan}")
finally:
print("\\nPengecekan buah selesai.")
print("Semoga harimu menyenangkan!")
if __name__ == "__main__":
akses_buah_dari_list()
Dengan menguasai try, except,
else, dan finally, program Python-mu akan
menjadi jauh lebih kuat, tidak mudah “ngambek” atau crash, dan
pastinya memberikan pengalaman yang lebih baik bagi siapa saja yang
menggunakannya. Ini adalah salah satu ciri programmer yang handal!
Di bab berikutnya, kita akan pelajari cara mengelola modul dan paket. Ini akan membantu kita menyusun program yang lebih besar menjadi beberapa file yang lebih terorganisir dan memungkinkan kita menggunakan ulang code dengan lebih mudah. Siap untuk petualangan berikutnya?
Referensi dan Materi Pendamping
Langkah Selanjutnya
Bab 16 membahas Fungsi Bawaan dan Modul Standar. Sebelum melanjutkan, pastikan kamu dapat menjelaskan tujuan belajar dan menyelesaikan tiga latihan inti bab ini.
Edisi September 2026. Nomor contoh, pertanyaan, dan latihan digunakan bersama pada buku dan halaman ini.
