10. Membaca pesan error

Saat sebuah program salah, Python tidak diam saja — Python mencetak sebuah pesan error dan berhenti. Pemula melihat teks merah itu sebagai kebisingan yang menakutkan dan mulai mengubah hal-hal secara acak. Tapi itu bukan kebisingan: Python sedang memberitahumu tepat di baris mana yang harus dilihat dan memberikan petunjuk apa yang salah. Bab ini mengajarkan cara membacanya.

Bentuk sebuah error

Hampir setiap error Python punya bentuk yang sama:

Traceback (most recent call last):
  File "file.py", line LINE, in <module>
    the line of code that broke
ErrorType: message

Empat bagian, dan kamu membacanya dalam urutan ini:

  1. Nama file dan nomor baris (File "file.py", line 3). Lihat di situ dulu. Selalu.
  2. Baris kode yang ditampilkan tepat di bawahnya. Python mengutip baris sumber yang sebenarnya agar kamu bisa melihatnya.
  3. Tipe error (ErrorType), seperti SyntaxError atau NameError. Ini adalah kategori masalahnya.
  4. Pesan — deskripsi singkat tentang apa yang salah.

Kata "Traceback" di bagian atas dan bagian in <module> belum penting untuk sekarang. Fokus pada file/baris dan baris terakhir dari error.

Empat error yang paling sering kamu temui

Keempat ini mencakup sebagian besar kesalahan awal. Belajar mengenalinya dari pandangan pertama.

SyntaxError: unterminated string literal

Kamu lupa tanda kutip penutup.

print("hi)
  File "hello.py", line 1
    print("hi)
          ^
SyntaxError: unterminated string literal (detected at line 1)

"Unterminated string literal" berarti Python menemukan tanda kutip pembuka dan mencapai akhir baris tanpa menemukan penutupnya. Perbaikan: tambahkan " yang hilang.

NameError: name is not defined

Kamu salah mengeja nama variable atau function.

prnt("hi")
Traceback (most recent call last):
  File "hello.py", line 1, in <module>
    prnt("hi")
NameError: name 'prnt' is not defined

Python berkata: kamu menggunakan nama prnt, tapi tidak ada yang bernama itu. Nama dalam tanda kutip ('prnt') adalah kata yang salah eja. Perbaikan: tulis print.

IndentationError: unexpected indent

Kamu menambahkan spasi di awal baris yang seharusnya tidak diindentasi.

print("hello")
    print("world")
  File "hello.py", line 2
    print("world")
    ^
IndentationError: unexpected indent

Python menggunakan indentasi untuk memahami struktur kode. Indentasi ekstra di tempat yang tidak diharapkan adalah error. Perbaikan: hapus spasi di awal dari baris itu.

SyntaxError: expected ':'

Kamu menulis baris if, for, while, atau def tapi lupa titik dua di akhir.

if x > 3
    print("big")
  File "hello.py", line 1
    if x > 3
            ^
SyntaxError: expected ':'

Yang satu ini langsung: Python mengharapkan : untuk mengakhiri baris if dan tidak menemukannya. Perbaikan: tambahkan : di akhir baris pertama.

Loop edit–jalankan–perbaiki

Cara yang benar untuk menangani error bukan dengan mencoba menemukannya semua dengan mata, tapi dengan menjalankan loop yang ketat:

  1. Jalankan file.
  2. Baca error pertama: nomor baris, lalu tipe error, lalu pesan.
  3. Perbaiki satu hal itu.
  4. Jalankan lagi.

Ulangi sampai berjalan bersih. Jangan perbaiki tiga hal sekaligus — satu "perbaikan" mungkin salah, dan kamu tidak bisa tahu perubahan mana yang membantu. Satu error, satu perbaikan, jalankan lagi.

Satu kesalahan terkadang menghasilkan pesan yang membingungkan, atau yang menunjuk ke baris setelah masalah sebenarnya. Kalau baris yang disebutkan terlihat baik-baik saja, cek tepat di atasnya.

Buka exercises/10/01-three-bugs.py. File ini tidak bisa dijalankan. Gunakan loop edit–jalankan–perbaiki: jalankan, baca error pertama, perbaiki hanya itu, jalankan lagi. Terus lakukan sampai mencetak All fixed!.

Error bukan kegagalan

Setiap programmer membaca pesan error setiap hari. Itu bukan tanda kamu tidak pandai dalam hal ini — itu adalah proses bolak-balik yang normal dalam menulis kode. Membaca error dengan tenang hanya berarti kamu sudah membaca beberapa ribu di antaranya. Kamu sedang dalam perjalanan itu.

Pekerjaan Rumah

File pekerjaan rumah ada di exercises/10/homework/.

Soal 1 — Namai error-nya

Buka exercises/10/homework/01-name-the-error.py. File ini berisi satu baris yang rusak. Jalankan, baca pesannya, dan (dalam sebuah comment di bagian bawah) tulis tipe error mana dari empat tipe di bab ini yang sesuai. Kemudian perbaiki.

Soal 2 — Perbaiki tanda kutipnya

Buka exercises/10/homework/02-fix-the-quote.py. File ini punya unterminated string literal. Perbaiki agar program mencetak kutipan dalam satu baris.

Soal 3 — Perbaiki typo-nya

Buka exercises/10/homework/03-fix-the-typo.py. Nama function salah eja, menghasilkan NameError. Perbaiki.

Tantangan — Tiga sekaligus

Buka exercises/10/homework/04-three-in-a-row.py. File ini punya tiga kesalahan terpisah, masing-masing satu: string yang tidak ditutup, print yang salah eja, dan indentasi tak terduga. Perbaiki satu per satu, jalankan setelah setiap perbaikan, sampai file mencetak:

done

Stuck atau sudah selesai? Buka halaman solusi pekerjaan rumah.