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:
- Nama file dan nomor baris
(
File "file.py", line 3). Lihat di situ dulu. Selalu. - Baris kode yang ditampilkan tepat di bawahnya. Python mengutip baris sumber yang sebenarnya agar kamu bisa melihatnya.
- Tipe error (
ErrorType), sepertiSyntaxErroratauNameError. Ini adalah kategori masalahnya. - 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:
- Jalankan file.
- Baca error pertama: nomor baris, lalu tipe error, lalu pesan.
- Perbaiki satu hal itu.
- 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.