Error dan try/except
Error bukan tanda kamu gagal — ia satu-satunya cara Python memberi tahu apa yang terjadi. Belajar membacanya adalah keterampilan tersendiri.
Intisari
- Baca traceback dari bawah ke atas: baris terakhir menyebutkan jenis error dan sebabnya.
try:berisi kode yang mungkin gagal,except:berisi apa yang dilakukan kalau gagal.- Selalu sebutkan jenis errornya:
except ValueError:— janganexcept:polos. - Yang paling sering:
ValueError,TypeError,KeyError,IndexError,FileNotFoundError. - Pakai
tryuntuk hal di luar kendalimu (input pengguna, file, jaringan) — bukan untuk menutupi kode yang memang salah.
Membaca traceback
Traceback (most recent call last):
File "program.py", line 8, in <module>
print(hitung(10, 0))
File "program.py", line 5, in hitung
return a / b
ZeroDivisionError: division by zero
Cara membacanya:
- Mulai dari baris paling bawah. Di situ jenis errornya (
ZeroDivisionError) dan penjelasannya (division by zero). - Naik ke
Fileterdekat di atasnya. Itu baris kode yang benar-benar meledak — baris 5. - Baris-baris di atasnya menunjukkan jalur pemanggilan: baris 8 memanggil fungsi yang gagal di baris 5.
Jangan panik melihat traceback panjang. Yang penting cuma dua: baris terakhir, dan nama file milikmu yang paling bawah. Sisanya sering isi perut pustaka lain yang tidak perlu kamu urus.
Error yang paling sering ditemui
| Error | Artinya | Contoh penyebab |
|---|---|---|
SyntaxError | Tulisannya bukan Python yang sah | Lupa titik dua atau kurung penutup |
NameError | Nama tidak dikenal | Salah ketik nama variabel |
TypeError | Tipe salah untuk operasi itu | "5" + 5 |
ValueError | Tipe benar, isinya tidak masuk akal | int("abc") |
IndexError | Indeks di luar jangkauan | [1,2,3][5] |
KeyError | Kunci tidak ada di dictionary | data["tidakada"] |
FileNotFoundError | File tidak ditemukan | Salah nama atau salah folder |
ZeroDivisionError | Pembagian dengan nol | 10 / 0 |
IndentationError | Indentasi kacau | Campur Tab dan spasi |
try / except
try:
umur = int(input("Umur: "))
print(f"Tahun depan {umur + 1}")
except ValueError:
print("Itu bukan angka.")
Python menjalankan blok try. Kalau semuanya lancar, except dilewati.
Kalau terjadi ValueError, eksekusi langsung lompat ke except dan program tetap hidup.
Menangani beberapa jenis error
try:
a = int(input("Angka pertama: "))
b = int(input("Angka kedua: "))
print(a / b)
except ValueError:
print("Masukkan angka, bukan huruf.")
except ZeroDivisionError:
print("Tidak bisa dibagi nol.")
Jangan menangkap semua error
# BURUK — menelan semua masalah, termasuk salah ketik namamu sendiri
try:
hasil = hitnug(10) # typo!
except:
print("Terjadi kesalahan") # kamu tidak akan pernah tahu apa yang salah
except polos menyembunyikan bug. Sebutkan selalu jenis error yang memang
kamu antisipasi. Kalau muncul error lain, biarkan program berhenti dan menunjukkan tracebacknya —
itu jauh lebih baik daripada program yang berjalan sambil salah diam-diam.
else dan finally
try:
f = open("data.txt", encoding="utf-8")
except FileNotFoundError:
print("File tidak ada")
else:
print(f.read()) # jalan hanya kalau TIDAK ada error
f.close()
finally:
print("Selesai") # SELALU jalan, error atau tidak
Dalam praktik, finally jarang kamu butuhkan untuk file — with open() sudah mengurusnya.
Pola: minta ulang sampai benar
while True:
try:
umur = int(input("Umur: "))
if umur < 0:
print("Umur tidak boleh negatif.")
continue
break
except ValueError:
print("Masukkan angka.")
print(f"Umurmu {umur} tahun")
Ini bentuk baku validasi input, dan menggabungkan hampir semua yang kamu pelajari sejauh ini.
Kapan pakai try, kapan cek dengan if
| Situasi | Cara |
|---|---|
| Input pengguna mungkin bukan angka | try / except ValueError |
| File mungkin belum ada | try, atau Path(...).exists() |
| Kunci dictionary mungkin tidak ada | .get() atau if k in d |
| Pembagi mungkin nol | if b != 0 — lebih jelas |
| Kode kamu sendiri yang salah tulis | Perbaiki kodenya, jangan dibungkus try |
Latihan: ambil kalkulator dari Fase 3 dan buat ia benar-benar tahan banting — masukan bukan angka, pembagian nol, dan operator yang tidak dikenal semuanya ditangani dengan pesan yang jelas, tanpa program pernah berhenti mendadak.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.