Error Python Pemula: Arti Pesan Error dan Cara Memperbaikinya
Cara membaca traceback Python dan memperbaiki 7 error praktikum: IndentationError, NameError, TypeError, ValueError, IndexError, KeyError, ZeroDivisionError.

Di halaman ini
- Cara membaca traceback Python dari bawah ke atas
- Kenapa error Python baru muncul saat program jalan?
- Tujuh error yang paling sering muncul di praktikum
- IndentationError dan NameError: salah ketik dan spasi
- IndentationError
- NameError
- TypeError dan ValueError: masalah input()
- TypeError karena input() selalu string
- ValueError dari int("3.5")
- IndexError, KeyError, ZeroDivisionError: data yang tidak ada
- IndexError karena off by one
- KeyError
- ZeroDivisionError
- Kesalahan yang sering terjadi saat memperbaiki error
- FAQ
- Apa beda SyntaxError dan IndentationError?
- Kenapa error muncul di baris yang kelihatannya benar?
- Apakah boleh memakai try except untuk semua error?
- Bagaimana mengatasi input angka desimal yang memakai koma?
- Kenapa round(2.5) menghasilkan 2, bukan 3?
- Error saat fungsi rekursif, apa artinya RecursionError?
Cara mengatasi error Python dimulai dari baris paling bawah pesan error: di situ tertulis jenis error (misalnya TypeError) dan penjelasannya. Baris di atasnya menunjukkan kode yang gagal dan nomor barisnya. Tujuh error di bawah ini muncul paling sering di praktikum pemrograman dasar, masing-masing dengan kode yang salah, pesan persis yang keluar, dan perbaikannya.
Semua pesan error di artikel ini disalin dari Python 3.12. Versi lain bisa sedikit berbeda tampilannya, tapi baris terakhirnya hampir selalu sama.
Cara membaca traceback Python dari bawah ke atas
Traceback adalah laporan yang Python cetak ketika program berhenti karena error. Contoh dari fungsi yang membagi dengan nol:
Traceback (most recent call last):
File "nilai.py", line 4, in <module>
print(rata([]))
^^^^^^^^
File "nilai.py", line 2, in rata
return sum(nilai) / len(nilai)
~~~~~~~~~~~^~~~~~~~~~~~
ZeroDivisionError: division by zero
Urutan membacanya:
- Baris terakhir:
ZeroDivisionError: division by zero. Ini jenis error dan alasannya. - Blok tepat di atasnya: error terjadi di baris 2, di dalam fungsi
rata, tepatnya di operasi/(ditunjuk oleh tanda^). - Blok paling atas: fungsi itu dipanggil dari baris 4. Di sinilah biasanya sumber masalahnya, karena list kosong dikirim dari situ.
Kalimat "most recent call last" artinya panggilan terakhir ada di paling bawah. Jadi semakin ke bawah, semakin dekat ke tempat error terjadi. Penanda ^^^ dan ~~~ hanya muncul di Python 3.11 ke atas. Di versi lama, kamu hanya melihat barisnya.
Kenapa error Python baru muncul saat program jalan?
Python menjalankan program baris demi baris. Kebanyakan error, seperti TypeError atau IndexError, baru ketahuan ketika baris itu dieksekusi. Akibatnya, baris-baris sebelumnya sudah berjalan dan mungkin sudah mencetak sesuatu.
Ini berbeda dari bahasa C, yang menolak program di tahap kompilasi sebelum apa pun berjalan (lihat error umum bahasa C untuk pemula). Di Python, program yang salah tipe data di baris 50 tetap bisa berjalan normal sampai baris 49.
Pengecualiannya adalah IndentationError dan SyntaxError. Keduanya dicek sebelum program jalan, sehingga tidak ada satu baris pun yang dieksekusi. Kalau baris pertamamu print("mulai") dan tulisan itu tidak muncul, kemungkinan besar masalahnya ada di indentasi atau sintaks.
Tujuh error yang paling sering muncul di praktikum
| Error | Arti singkat | Penyebab paling umum |
|---|---|---|
IndentationError | Spasi di awal baris tidak sesuai | Lupa menjorokkan isi for/if/def, atau menjorok tanpa alasan |
NameError | Nama variabel atau fungsi tidak dikenal | Salah ketik, atau variabel belum dibuat |
TypeError | Operasi tidak cocok dengan tipe data | Hasil input() masih string |
ValueError | Tipe benar, isinya tidak bisa diproses | int("3.5") atau int("") |
IndexError | Indeks di luar panjang list | Loop sampai len(list), bukan len(list) - 1 |
KeyError | Kunci tidak ada di dictionary | Salah nama kunci, atau kunci belum diisi |
ZeroDivisionError | Pembagian dengan nol | Rata-rata dari list kosong |
IndentationError dan NameError: salah ketik dan spasi
IndentationError
Kode salah, isi loop tidak dijorokkan:
for i in range(3):
print(i)
Pesannya:
IndentationError: expected an indented block after 'for' statement on line 1
Perbaikannya, jorokkan print(i) empat spasi. Kasus kebalikannya adalah baris yang menjorok padahal tidak perlu, dengan pesan IndentationError: unexpected indent. Ini sering terjadi saat menyalin kode dari PDF modul, karena spasinya ikut tersalin tidak rata.
Kalau satu blok bercampur tab dan spasi, pesannya berubah menjadi TabError: inconsistent use of tabs and spaces in indentation. Atur editor supaya tombol Tab menghasilkan empat spasi.
NameError
nilai_akhir = 85
print(nilai_akir)
NameError: name 'nilai_akir' is not defined. Did you mean: 'nilai_akhir'?
Sejak Python 3.10, pesan ini sering memberi saran nama yang mirip. Saran itu hanya muncul kalau namanya cukup dekat. Kalau kamu menulis rata_rata padahal variabelnya rata, pesannya hanya name 'rata_rata' is not defined tanpa saran.
Penyebab lain yang sering terlewat: Print("halo") dengan huruf P besar. Python membedakan huruf besar dan kecil, jadi Print dianggap nama yang tidak ada.
TypeError dan ValueError: masalah input()
Dua error ini paling sering muncul di soal yang meminta pengguna mengetik angka.
TypeError karena input() selalu string
umur = input("Umur: ")
print(umur + 1)
Ketika pengguna mengetik 19, yang tersimpan di umur adalah teks "19", bukan angka 19. Menjumlahkan teks dengan angka menghasilkan:
TypeError: can only concatenate str (not "int") to str
Perbaikannya, ubah dulu ke angka: umur = int(input("Umur: ")). Sekarang umur + 1 menghasilkan 20.
Pesan yang sama muncul untuk kasus kebalikannya, "Nilai: " + 85. Di sini perbaikannya adalah mengubah angka menjadi teks dengan str(85), atau memakai f-string: f"Nilai: {85}".
ValueError dari int("3.5")
nilai = int("3.5")
ValueError: invalid literal for int() with base 10: '3.5'
Tipe datanya benar (string), tapi isinya bukan bilangan bulat, sehingga int() menolak. Kalau inputnya bisa berupa desimal, pakai float(input()). Kalau kamu memang butuh bilangan bulat dari teks desimal, ubah dulu ke float: int(float("3.5")) menghasilkan 3. Perhatikan bahwa int() memotong, bukan membulatkan, jadi int(float("3.7")) juga menghasilkan 3.
Pengguna yang langsung menekan Enter tanpa mengetik akan memicu ValueError: invalid literal for int() with base 10: ''. Tanda kutip kosong di akhir pesan adalah petunjuknya.
IndexError, KeyError, ZeroDivisionError: data yang tidak ada
IndexError karena off by one
nilai = [80, 75, 90]
for i in range(len(nilai) + 1):
print(nilai[i])
Program mencetak 80, 75, 90, lalu berhenti dengan:
IndexError: list index out of range
List berisi tiga elemen punya indeks 0, 1, dan 2. Loop di atas mencoba indeks 3. Perbaikannya, pakai range(len(nilai)), atau lebih sederhana for n in nilai: print(n) yang tidak memakai indeks sama sekali.
Perhatikan bahwa tiga angka sempat tercetak sebelum error. Ini contoh nyata dari bagian sebelumnya: error Python muncul saat baris itu dijalankan, bukan di awal.
KeyError
mhs = {"nama": "Rina", "nim": "2301"}
print(mhs["ipk"])
KeyError: 'ipk'
Dictionary ini tidak punya kunci "ipk". Ada dua perbaikan tergantung maksudnya:
- Kalau kuncinya salah ketik, betulkan namanya. Kunci dictionary juga peka huruf besar, jadi
"IPK"dan"ipk"berbeda. - Kalau kuncinya memang bisa belum ada, pakai
mhs.get("ipk", 0.0), yang mengembalikan 0.0 alih-alih error. Atau cek dulu denganif "ipk" in mhs:.
ZeroDivisionError
def rata(nilai):
return sum(nilai) / len(nilai)
print(rata([]))
ZeroDivisionError: division by zero
len([]) bernilai 0. Error ini jarang muncul saat kamu menguji dengan data contoh, tapi asisten praktikum sering menguji dengan list kosong. Perbaikannya, tangani kasus kosong secara eksplisit:
def rata(nilai):
if len(nilai) == 0:
return 0
return sum(nilai) / len(nilai)
Apakah mengembalikan 0 itu benar tergantung soal. Kalau soal meminta pesan khusus, cetak pesannya. Hal yang penting adalah program tidak berhenti tiba-tiba.
Kesalahan yang sering terjadi saat memperbaiki error
- Membaca traceback dari atas. Baris paling atas hanya menunjukkan dari mana program mulai. Jenis error dan tempat persisnya ada di bawah.
- Membungkus semua kode dengan
try: ... except: pass. Error memang hilang dari layar, tapi programnya tetap salah dan kamu kehilangan petunjuk. Gunakanexcepthanya untuk error yang kamu tahu cara menanganinya, misalnyaexcept ValueError:saat membaca input angka. - Memperbaiki baris yang ditunjuk padahal masalahnya di pemanggil. Pada contoh
rata([]), baris 2 tidak salah. Data kosong datang dari baris 4. - Menyalin kode dari slide atau PDF lalu bingung kenapa muncul
IndentationErroratauSyntaxErrordi baris yang terlihat benar. Tanda kutip miring (“ ”) dari dokumen juga ditolak Python. Ketik ulang baris itu. - Menamai berkas sama dengan modul bawaan, misalnya
random.pyataumath.py. Perintahimport randomlalu memuat berkasmu sendiri, dan muncul error aneh sepertiAttributeError. Ganti nama berkasnya.
Setelah program bebas error, masalah berikutnya biasanya hasil yang keliru tanpa pesan apa pun, misalnya None yang tercetak di bawah hasil. Itu dibahas di beda print dan return di fungsi Python. Untuk error yang muncul saat memakai class, lihat OOP Python: class, self, dan inheritance.
FAQ
Apa beda SyntaxError dan IndentationError?
IndentationError sebenarnya jenis khusus dari SyntaxError yang menyangkut spasi di awal baris. Keduanya dicek sebelum program berjalan. SyntaxError biasa muncul karena hal lain, misalnya kurung tidak ditutup atau titik dua setelah if terlupa.
Kenapa error muncul di baris yang kelihatannya benar?
Untuk SyntaxError, Python kadang baru sadar ada kesalahan setelah membaca baris berikutnya. Di Python 3.9 ke bawah, kurung yang tidak ditutup di baris 5 biasanya dilaporkan di baris 6. Sejak Python 3.10, pesannya lebih jelas, misalnya '(' was never closed, dan langsung menunjuk baris tempat kurung dibuka. Tetap periksa juga baris tepat di atas yang ditunjuk.
Apakah boleh memakai try except untuk semua error?
Boleh secara teknis, tapi buruk untuk belajar dan sering dikurangi nilainya di praktikum. Tangkap jenis error tertentu yang kamu harapkan, misalnya ValueError saat konversi input, dan biarkan error lain tetap terlihat.
Bagaimana mengatasi input angka desimal yang memakai koma?
Python hanya mengenali titik sebagai pemisah desimal. float("3,5") menghasilkan ValueError. Kalau pengguna mungkin mengetik koma, ganti dulu: float(teks.replace(",", ".")).
Kenapa round(2.5) menghasilkan 2, bukan 3?
Python membulatkan nilai yang tepat di tengah ke bilangan genap terdekat. Jadi round(2.5) menghasilkan 2 dan round(3.5) menghasilkan 4. Ini bukan error, tapi sering dikira bug saat menghitung nilai.
Error saat fungsi rekursif, apa artinya RecursionError?
Fungsi memanggil dirinya sendiri terlalu banyak kali tanpa berhenti, biasanya karena kasus dasarnya salah atau tidak pernah tercapai. Cara melacaknya dibahas di tracing rekursi Python dengan call stack.

