Cara Membaca Pesan Error Python (dan Bertanya ke AI)
Pesan error bukan tanda kamu gagal. Ia petunjuk yang menyebutkan apa yang salah dan di baris mana. Kamu hanya perlu tahu cara membacanya.
Oleh Afa Hernandes6 menit baca
Daftar isi
- Anatomi pesan error: baca dari bawah ke atas
- Traceback yang bertingkat
- Sepuluh pesan error yang paling sering
- Langkah mencari penyebab
- Menangani error yang memang bisa terjadi
- Bertanya ke AI dengan benar
- Latihan
- Pertanyaan yang sering diajukan
- Kenapa nomor baris di error tidak cocok dengan letak kesalahanku?
- Apakah sebaiknya semua kode dibungkus try/except supaya tidak pernah error?
- Kesimpulan
Setiap programmer, dari pemula sampai yang sudah puluhan tahun, melihat pesan error setiap hari. Bedanya bukan pada seberapa sering error muncul, tapi pada seberapa cepat mereka membacanya. Pemula melihat tulisan merah dan panik. Programmer berpengalaman langsung melihat baris terakhir, menemukan nomor baris, dan biasanya sudah tahu masalahnya dalam beberapa detik.
Kabar baiknya, cara membaca pesan error bisa dipelajari, dan tidak sulit. Di tutorial ini kamu akan belajar membaca traceback Python, mengenali sepuluh pesan error yang paling sering muncul, mencari penyebabnya secara sistematis, dan bertanya ke AI dengan cara yang membuatmu makin paham, bukan makin bergantung.
Semua pesan error di artikel ini adalah keluaran asli Python 3.13.
Anatomi pesan error: baca dari bawah ke atas
Program ini meminta umur, lalu menghitung umur tahun depan:
umur = int(input("Umur: "))print(f"Tahun depan kamu berumur {umur + 1}")Kalau pengguna mengetik dua puluh, programnya berhenti dengan pesan ini:
Umur: Traceback (most recent call last): File "umur.py", line 1, in <module> umur = int(input("Umur: "))ValueError: invalid literal for int() with base 10: 'dua puluh'Pesan ini disebut traceback. Cara membacanya: dari bawah ke atas.
- Baris paling bawah adalah intinya. Ada dua bagian: jenis error (
ValueError) dan penjelasannya (invalid literal for int() with base 10: 'dua puluh'). Artinya:int()tidak bisa mengubah teks'dua puluh'menjadi bilangan. - Di atasnya ada lokasinya: file
umur.py, baris 1, beserta isi baris tersebut. - Baris
Traceback (most recent call last)hanya pembuka. Artinya, kejadian terakhir ada di paling bawah.
Jadi dalam satu kalimat: di baris 1, int() gagal karena isinya teks, bukan angka. (Cara memperbaikinya ada di bagian akhir artikel ini.)
Traceback yang bertingkat
Kalau error terjadi di dalam function yang dipanggil function lain, traceback menunjukkan seluruh jalurnya:
def rata_rata(nilai): return sum(nilai) / len(nilai)
def laporan(kelas): return f"Rata-rata kelas: {rata_rata(kelas)}"
print(laporan([80, 90]))print(laporan([]))Rata-rata kelas: 85.0Traceback (most recent call last): File "laporan.py", line 10, in <module> print(laporan([])) ~~~~~~~^^^^ File "laporan.py", line 6, in laporan return f"Rata-rata kelas: {rata_rata(kelas)}" ~~~~~~~~~^^^^^^^ File "laporan.py", line 2, in rata_rata return sum(nilai) / len(nilai) ~~~~~~~~~~~^~~~~~~~~~~~ZeroDivisionError: division by zeroBaca dari bawah:
- Apa:
ZeroDivisionError: division by zero, yaitu pembagian dengan nol. - Di mana: baris 2, di function
rata_rata, saatsum(nilai) / len(nilai)dihitung. - Bagaimana sampai ke sana: baris 10 memanggil
laporan([]), lalu baris 6 memanggilrata_rata(kelas)dengan list kosong, sehinggalen(nilai)bernilai 0.
Tanda ~~~ dan ^^^ menunjuk bagian kode yang bermasalah. Penyebab sebenarnya ada di baris 10: list kosong. Baris 2 hanya tempat error-nya muncul. Pertanyaannya: apa yang seharusnya terjadi kalau sebuah kelas belum punya nilai? Itu keputusanmu sebagai pembuat program, misalnya mengembalikan 0 atau menampilkan “belum ada nilai”.
Sepuluh pesan error yang paling sering
| Error | Contoh pesan asli | Biasanya karena |
|---|---|---|
SyntaxError |
'(' was never closed |
Kurung, kutip, atau titik dua tidak lengkap. Lihat baris yang ditunjuk, dan baris sebelumnya |
SyntaxError |
unterminated string literal (detected at line 1) |
Tanda kutip pembuka tanpa penutup |
IndentationError |
expected an indented block after 'if' statement on line 3 |
Isi blok if/for/def tidak menjorok |
NameError |
name 'nmaa' is not defined |
Salah ketik nama variabel, atau variabel dipakai sebelum dibuat |
TypeError |
can only concatenate str (not "int") to str |
Menyambung teks dengan angka. Pakai f-string atau str() |
ValueError |
invalid literal for int() with base 10: 'dua puluh' |
Nilainya bertipe benar, tapi isinya tidak bisa diolah |
IndexError |
list index out of range |
Indeks melebihi jumlah item. Ingat, indeks dimulai dari 0 |
KeyError |
'stok' |
Kunci tidak ada di dictionary. Cek ejaan, atau pakai .get() |
AttributeError |
'int' object has no attribute 'append' |
Memanggil method yang tidak dimiliki tipe tersebut. Variabelnya bukan tipe yang kamu kira |
ModuleNotFoundError |
No module named 'requests' |
Library belum dipasang (pip install requests), atau terpasang di Python yang berbeda |
Satu lagi yang sering muncul saat membaca file: FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'. Biasanya karena terminal tidak berada di folder yang berisi file itu. Cek dengan pwd, seperti di tutorial VS Code dan terminal.
Beberapa pesan memberi saran sendiri, misalnya Maybe you meant '==' or ':=' instead of '='?. Baca sarannya. Biasanya tepat, tapi tidak selalu.
Langkah mencari penyebab
Kalau penyebabnya tidak langsung terlihat, ikuti urutan ini:
- Baca baris terakhir dengan teliti. Jenis error dan penjelasannya sudah mempersempit kemungkinan.
- Buka baris yang disebut, dan baris sebelumnya. Terutama untuk
SyntaxError, kesalahannya sering ada satu baris di atas (misalnya kurung yang belum ditutup). - Periksa isi variabel. Tambahkan
print()sementara sebelum baris yang error:
print("DEBUG kelas =", kelas, type(kelas))Sering kali isinya tidak seperti yang kamu kira: list kosong, teks yang kamu kira angka, atau None.
- Perkecil masalahnya. Buat file baru berisi hanya beberapa baris yang memunculkan error yang sama. Masalah yang kecil jauh lebih mudah dipahami, oleh kamu maupun oleh AI.
- Ubah satu hal, lalu jalankan lagi. Jangan mengubah lima hal sekaligus, karena kamu tidak akan tahu mana yang memperbaikinya.
Menangani error yang memang bisa terjadi
Sebagian error bukan kesalahan kode, tapi kondisi yang memang mungkin terjadi, seperti pengguna salah ketik. Untuk kasus seperti itu, tangani dengan try dan except:
teks = "dua puluh" # bayangkan ini hasil input()
try: umur = int(teks) print(f"Tahun depan kamu berumur {umur + 1}")except ValueError: print("Umur harus diisi dengan angka, misalnya 20.")Umur harus diisi dengan angka, misalnya 20.Tangkap jenis error yang spesifik (ValueError), bukan semua error dengan except: saja. Menangkap semua error sekaligus akan menyembunyikan bug yang sebenarnya.
Bertanya ke AI dengan benar
AI sangat membantu untuk memahami error, asalkan pertanyaannya tepat. Bandingkan:
- ❌ “Kode saya error, tolong perbaiki.” Lalu menempel seluruh file.
- ✅ Pertanyaan dengan konteks, yang meminta penjelasan dulu:
Saya belajar Python. Program saya menghasilkan error berikut:
[tempel traceback LENGKAP, dari "Traceback" sampai baris terakhir]
Kode di sekitar baris yang error:[tempel beberapa baris saja, bukan seluruh file]
Yang saya harapkan: [hasil yang kamu inginkan]Yang sudah saya coba: [misalnya: sudah cek isi variabel dengan print, isinya list kosong]
Jelaskan dulu arti error-nya dan kenapa terjadi. Beri petunjuk cara memperbaikinya,tapi jangan langsung tulis kode jadinya.Kenapa minta petunjuk, bukan jawaban? Kalau AI langsung memberi kode jadi, kamu menyalinnya, error-nya hilang, dan kamu tidak belajar apa-apa. Lain kali error yang sama muncul lagi, kamu kembali bertanya. Kalau AI memberi petunjuk dan kamu memperbaikinya sendiri, error itu tidak akan membingungkanmu lagi. Kebiasaan ini dibahas lengkap di belajar ngoding dengan AI tanpa bergantung.
Dua aturan tambahan: tempel traceback lengkap (jangan diringkas, karena detailnya penting), dan jangan menempel data rahasia seperti password atau API key ke dalam chat.
Latihan
Program berikut punya dua masalah. Jalankan, baca error pertama, perbaiki, lalu jalankan lagi untuk menemukan yang kedua:
harga = [18000, 25000, 30000]print("Harga ketiga: " + harga[3])Pertanyaan yang sering diajukan
Kenapa nomor baris di error tidak cocok dengan letak kesalahanku?
Untuk SyntaxError, Python baru sadar ada yang salah saat membaca baris berikutnya, jadi periksa juga baris sebelumnya. Untuk error lain, baris yang ditunjuk adalah tempat error muncul. Penyebabnya, misalnya data yang salah, bisa berasal dari baris lain. Telusuri traceback ke atas.
Apakah sebaiknya semua kode dibungkus try/except supaya tidak pernah error?
Tidak. Error yang muncul justru membantumu menemukan bug. Pakai try/except hanya untuk kondisi yang memang bisa terjadi dan sudah kamu tahu cara menanganinya, seperti input yang salah atau file yang tidak ada.
Kesimpulan
Baca traceback dari bawah ke atas: jenis error dan penjelasannya, lalu file dan nomor barisnya, lalu jalur pemanggilannya. Kenali sepuluh error yang paling sering, periksa isi variabel dengan print(), perkecil masalahnya, dan ubah satu hal setiap kali mencoba. Saat bertanya ke AI, sertakan traceback lengkap dan minta penjelasan, bukan jawaban jadi.
Langkah berikutnya di jalur Mulai Ngoding dari Nol: menjadikan AI guru privat, bukan joki tugas, di belajar ngoding dengan AI tanpa bergantung.



