ngodingdulu
Dasar PemrogramanTutorialPemula

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

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.py
umur = int(input("Umur: "))
print(f"Tahun depan kamu berumur {umur + 1}")

Kalau pengguna mengetik dua puluh, programnya berhenti dengan pesan ini:

Output
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.

  1. 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.
  2. Di atasnya ada lokasinya: file umur.py, baris 1, beserta isi baris tersebut.
  3. 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:

laporan.py
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([]))
Output
Rata-rata kelas: 85.0
Traceback (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 zero

Baca dari bawah:

  • Apa: ZeroDivisionError: division by zero, yaitu pembagian dengan nol.
  • Di mana: baris 2, di function rata_rata, saat sum(nilai) / len(nilai) dihitung.
  • Bagaimana sampai ke sana: baris 10 memanggil laporan([]), lalu baris 6 memanggil rata_rata(kelas) dengan list kosong, sehingga len(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:

  1. Baca baris terakhir dengan teliti. Jenis error dan penjelasannya sudah mempersempit kemungkinan.
  2. Buka baris yang disebut, dan baris sebelumnya. Terutama untuk SyntaxError, kesalahannya sering ada satu baris di atas (misalnya kurung yang belum ditutup).
  3. Periksa isi variabel. Tambahkan print() sementara sebelum baris yang error:
cek_isi.py (potongan)
print("DEBUG kelas =", kelas, type(kelas))

Sering kali isinya tidak seperti yang kamu kira: list kosong, teks yang kamu kira angka, atau None.

  1. 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.
  2. 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:

umur_aman.py
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.")
Output
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:
prompt-error.txt
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.

Bagikan:WhatsAppTelegramXFacebook
Ilustrasi list berisi tiga kotak bernomor indeks 0 sampai 2 dan dictionary berisi pasangan kunci dan nilai untuk keterangan, jumlah, dan kategori
DasarTutorial

List dan Dictionary di Python untuk Pemula

Program sungguhan jarang mengolah satu data saja. List menyimpan daftar yang berurutan, dictionary menyimpan data berdasarkan namanya. Keduanya akan kamu pakai setiap hari.

19 Oktober 20265 mnt

Ilustrasi mesin bertuliskan def hitung_total yang menerima input harga dan jumlah lalu mengeluarkan hasil total
DasarTutorial

Function di Python: Memecah Masalah Jadi Kecil

Kode yang dipakai berulang kali sebaiknya ditulis sekali dan diberi nama. Function membuat program lebih pendek, lebih mudah dibaca, dan lebih mudah diperbaiki.

16 Oktober 20265 mnt

Enter bukaEsc tutupHalaman pencarian