Artikel ini bagian dari seri Belajar Python Level Basic di hanifmu.com. Di artikel sebelumnya kita sudah membahas Lambda Function. Sekarang kita berhenti sebentar dari menulis fitur baru dan belajar membaca kesalahan.
Setiap programmer pasti pernah menemui kode yang berhenti di tengah jalan. Pesan merah di terminal itu bukan tanda kegagalanmu, melainkan petunjuk. Ada dua jenis masalah yang paling sering muncul: syntax error dan exception.
Dua Jenis Kesalahan
Python membedakan kesalahan menjadi dua berdasarkan kapan kesalahan itu terdeteksi.
Syntax error terjadi sebelum program berjalan. Python membaca seluruh file lebih dulu, dan kalau ada aturan penulisan yang dilanggar, program tidak akan pernah dieksekusi.
Exception terjadi saat program sudah berjalan. Kodenya ditulis dengan benar, tapi ada situasi yang tidak terduga saat eksekusi, misalnya membagi angka dengan nol atau membuka file yang tidak ada.
Perbedaan ini penting karena penanganannya berbeda. Syntax error harus diperbaiki di kode, sedangkan exception bisa ditangani agar program tetap berjalan.
Syntax Error
Syntax error muncul ketika penulisan kode tidak sesuai aturan Python. Contoh paling sederhana adalah lupa tanda kurung:
print("Halo"
Kalau dijalankan, Python langsung menolak:
File "contoh.py", line 1
print("Halo"
^
SyntaxError: '(' was never closed
Perhatikan tanda ^. Python menunjuk ke bagian yang dianggap bermasalah. Pesan '(' was never closed memberi tahu bahwa ada tanda kurung yang dibuka tapi tidak ditutup.
Contoh syntax error lain yang sering terjadi:
# Lupa titik dua setelah if
if x > 5
print("besar")
# Salah indentasi
def sapa():
print("Halo")
# Salah penulisan keyword
pritn("Halo")
Ciri khas syntax error adalah program tidak pernah sampai menampilkan output apa pun. Python berhenti sebelum baris pertama dijalankan.
Exception
Exception baru muncul saat program berjalan. Kode lolos pemeriksaan sintaks, tapi ada operasi yang gagal di tengah jalan:
angka = 10
pembagi = 0
print(angka / pembagi)
Traceback (most recent call last):
File "contoh.py", line 4, in <module>
print(angka / pembagi)
ZeroDivisionError: division by zero
Kode di atas tidak salah tulis. Python mengerti maksudnya. Masalahnya baru ketahuan saat baris itu benar-benar dijalankan.
Membaca Traceback
Saat exception terjadi, Python menampilkan traceback, laporan yang menunjukkan di mana kesalahan muncul. Banyak pemula panik melihatnya padahal isinya sangat membantu.
Bacalah dari bawah ke atas. Baris terakhir berisi jenis exception dan penjelasannya:
ZeroDivisionError: division by zero
Di atasnya ada lokasi kejadian, lengkap dengan nama file, nomor baris, dan potongan kode:
File "contoh.py", line 4, in <module>
print(angka / pembagi)
Kalau kode kamu memanggil function, traceback akan menampilkan rantai pemanggilannya. Bagian paling bawah adalah tempat kesalahan terjadi, bagian paling atas adalah tempat program dimulai.
Contoh traceback dengan beberapa lapis:
def bagi(a, b):
return a / b
def hitung():
return bagi(10, 0)
hitung()
Traceback (most recent call last):
File "contoh.py", line 7, in <module>
hitung()
File "contoh.py", line 5, in hitung
return bagi(10, 0)
File "contoh.py", line 2, in bagi
return a / b
ZeroDivisionError: division by zero
Dari laporan ini kita tahu urutannya: hitung() dipanggil, ia memanggil bagi(), dan di sanalah pembagian dengan nol terjadi. Tanpa traceback, kita harus menebak-nebak.
Exception Umum di Python
Beberapa exception berikut akan sering kamu temui. Mengenali namanya mempercepat proses mencari penyebab.
| Exception | Penyebab umum |
|---|---|
ValueError | Nilai benar tipe tapi tidak valid, misalnya int("abc") |
TypeError | Tipe data tidak cocok, misalnya "5" + 5 |
NameError | Memakai variabel yang belum dibuat |
IndexError | Indeks di luar jangkauan list |
KeyError | Key tidak ada di dictionary |
ZeroDivisionError | Pembagian dengan nol |
FileNotFoundError | File yang dibuka tidak ditemukan |
Mari lihat beberapa di antaranya:
# ValueError
angka = int("abc")
# ValueError: invalid literal for int() with base 10: 'abc'
# TypeError
hasil = "5" + 5
# TypeError: can only concatenate str (not "int") to str
# IndexError
buah = ["apel", "jeruk"]
print(buah[5])
# IndexError: list index out of range
# KeyError
siswa = {"nama": "Budi"}
print(siswa["umur"])
# KeyError: 'umur'
Pesan-pesan ini sebenarnya sudah menjelaskan masalahnya. Yang perlu dilatih hanyalah kebiasaan membacanya dengan tenang.
Kesalahan Umum Pemula
- Panik melihat traceback — baca dari baris terakhir, di situ ada nama exception dan penjelasannya.
- Mengira semua error sama — syntax error dan exception punya penyebab dan penanganan berbeda.
- Menebak tanpa membaca pesan — pesan error biasanya menyebut persis apa yang salah.
- Mengabaikan nomor baris — nomor baris di traceback menunjuk langsung ke lokasi masalah.
- Mengira exception berarti program rusak — exception adalah kejadian normal yang bisa ditangani.
Ringkasan
- Syntax error terjadi sebelum program berjalan karena aturan penulisan dilanggar
- Exception terjadi saat program berjalan karena ada situasi tak terduga
- Traceback adalah laporan lokasi dan jenis kesalahan, baca dari bawah ke atas
ValueError,TypeError,NameError,IndexError, danKeyErrortermasuk exception yang paling sering muncul- Pesan error adalah petunjuk, bukan hukuman
Langkah Selanjutnya
Sekarang kamu sudah bisa membaca kesalahan dengan lebih tenang. Tapi membaca saja belum cukup. Program yang baik tidak berhenti begitu saja saat menemui exception.
Artikel selanjutnya membahas try, except, dan finally di Python, cara menangani error agar program tetap berjalan.
