Kuliah

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.

Oleh Diterbitkan 5 Nov 2026 7 menit baca
Di halaman ini

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:

  1. Baris terakhir: ZeroDivisionError: division by zero. Ini jenis error dan alasannya.
  2. Blok tepat di atasnya: error terjadi di baris 2, di dalam fungsi rata, tepatnya di operasi / (ditunjuk oleh tanda ^).
  3. 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

ErrorArti singkatPenyebab paling umum
IndentationErrorSpasi di awal baris tidak sesuaiLupa menjorokkan isi for/if/def, atau menjorok tanpa alasan
NameErrorNama variabel atau fungsi tidak dikenalSalah ketik, atau variabel belum dibuat
TypeErrorOperasi tidak cocok dengan tipe dataHasil input() masih string
ValueErrorTipe benar, isinya tidak bisa diprosesint("3.5") atau int("")
IndexErrorIndeks di luar panjang listLoop sampai len(list), bukan len(list) - 1
KeyErrorKunci tidak ada di dictionarySalah nama kunci, atau kunci belum diisi
ZeroDivisionErrorPembagian dengan nolRata-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:

  1. Kalau kuncinya salah ketik, betulkan namanya. Kunci dictionary juga peka huruf besar, jadi "IPK" dan "ipk" berbeda.
  2. Kalau kuncinya memang bisa belum ada, pakai mhs.get("ipk", 0.0), yang mengembalikan 0.0 alih-alih error. Atau cek dulu dengan if "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

  1. Membaca traceback dari atas. Baris paling atas hanya menunjukkan dari mana program mulai. Jenis error dan tempat persisnya ada di bawah.
  2. Membungkus semua kode dengan try: ... except: pass. Error memang hilang dari layar, tapi programnya tetap salah dan kamu kehilangan petunjuk. Gunakan except hanya untuk error yang kamu tahu cara menanganinya, misalnya except ValueError: saat membaca input angka.
  3. Memperbaiki baris yang ditunjuk padahal masalahnya di pemanggil. Pada contoh rata([]), baris 2 tidak salah. Data kosong datang dari baris 4.
  4. Menyalin kode dari slide atau PDF lalu bingung kenapa muncul IndentationError atau SyntaxError di baris yang terlihat benar. Tanda kutip miring (“ ”) dari dokumen juga ditolak Python. Ketik ulang baris itu.
  5. Menamai berkas sama dengan modul bawaan, misalnya random.py atau math.py. Perintah import random lalu memuat berkasmu sendiri, dan muncul error aneh seperti AttributeError. 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.

Artikel Terkait

Siap taklukkan UTS, UAS, dan skripsi?