Penanganan Error: try, except, finally
Membuat program tangguh dengan menangkap, melempar, dan membersihkan setelah error.
Error vs exception
Saat Python menemui masalah saat program berjalan, ia melempar exception. Jika tidak ditangkap, program berhenti dan menampilkan traceback.
| Exception | Penyebab umum |
|---|---|
ValueError | Nilai tidak valid: int("abc") |
TypeError | Tipe salah: "5" + 3 |
ZeroDivisionError | 10 / 0 |
IndexError | index di luar jangkauan list |
KeyError | kunci dict tidak ada |
FileNotFoundError | file tidak ditemukan |
NameError | variable belum dibuat |
AttributeError | atribut/method tidak ada pada objek |
try dan except
try:
angka = int(input("Angka: "))
print(10 / angka)
except ValueError:
print("Itu bukan angka!")
except ZeroDivisionError:
print("Tidak boleh nol!")
Alur: kode di try dijalankan; jika terjadi error, langsung loncat ke except yang cocok; sisa kode try dilewati.
Menangkap beberapa error sekaligus
except (ValueError, TypeError):
...
except ValueError as e:
print("Detail:", e)
else dan finally
try:
f = open("data.txt")
except FileNotFoundError:
print("File tidak ada")
else:
print("Berhasil dibuka") # hanya jika TIDAK ada error
f.close()
finally:
print("Selalu dijalankan") # untuk pembersihan
finally berjalan apa pun yang terjadi — cocok untuk menutup koneksi/file.
raise: melempar error sendiri
def set_umur(umur):
if umur < 0:
raise ValueError("Umur tidak boleh negatif")
return umur
Exception buatan sendiri
class SaldoKurang(Exception):
pass
raise SaldoKurang("Saldo tidak cukup")
Pola EAFP vs LBYL
Python lebih menyukai EAFP ("lebih mudah minta maaf daripada minta izin"): coba saja, tangkap error bila gagal.
# LBYL: cek dulu
if "kunci" in data:
nilai = data["kunci"]
# EAFP: coba dulu
try:
nilai = data["kunci"]
except KeyError:
nilai = None
Praktik baik
- Tangkap error yang spesifik.
except:kosong atauexcept Exception:menyembunyikan bug. - Jangan "menelan" error diam-diam; minimal catat atau beri pesan jelas.
- Gunakan blok try sekecil mungkin.
- Gunakan
withuntuk resource (bab file) daripada finally manual.