SyntaxError adalah error yang paling cepat ditemui setiap orang belajar Python: satu tanda kutip kurang, satu titik dua hilang, dan interpreter menolak menjalankan program sama sekali. Error ini terasa menghentikan, tetapi sebenarnya paling ramah pemula — Python 3.12 memberi tahu lokasi kesalahan hingga posisi karakter, lengkap dengan saran perbaikan. Membaca pesan error dengan tenang adalah keterampilan yang mempercepat belajar. Chapter ini membedah anatomi SyntaxError, pola kesalahan paling umum, dan cara memanfaatkan petunjuk bawaan Python.

Anatomi Pesan SyntaxError #

Kita mulai dari contoh nyata. Program berikut lupa menutup string dengan tanda kutip:

python
print("Halo, dunia!)

Output yang Dihasilkan:

text
  File "sapa.py", line 1
    print("Halo, dunia!)
          ^
SyntaxError: unterminated string literal (detected at line 1)

Pesan ini punya empat bagian yang selalu muncul, dan membacanya dari bawah ke atas paling efektif:

  1. Baris terakhir (SyntaxError: unterminated string literal ...): jenis error beserta penjelasannya — string tidak ditutup, terdeteksi di baris 1.
  2. Baris File "sapa.py", line 1: file dan nomor baris tempat kesalahan ditemukan.
  3. Baris kode (print("Halo, dunia!)): interpreter menampilkan ulang baris yang bermasalah.
  4. Tanda sisip (^): penunjuk posisi karakter tempat interpreter menyadari ada masalah — di sini tepat pada tanda kutip pembuka string yang tidak pernah ditutup.

Perhatikan urutan membaca yang disarankan: mulai dari pesan di baris paling bawah, lalu naik ke lokasi. Pola yang sama berlaku untuk semua SyntaxError.

SyntaxError Terjadi Sebelum Program Berjalan #

Satu fakta penting membedakan SyntaxError dari error lain: interpreter memeriksa seluruh file terlebih dahulu sebelum menjalankan satu baris pun. Akibatnya, kesalahan sintaks di baris ke-50 mencegah baris 1–49 yang sehat sekalipun untuk berjalan:

python
print("Baris ini valid.")
print("Baris ini juga valid.")
print("Baris ketiga salah tulis"

Output yang Dihasilkan:

text
  File "setengah.py", line 3
    print("Baris ketiga salah tulis"
         ^
SyntaxError: '(' was never closed

Tidak ada satu baris pun tercetak — meskipun dua statement pertama valid, eksekusi tidak pernah dimulai. Ini berbeda dengan error runtime seperti NameError pada Chapter Memahami Sintaks Python yang muncul setelah baris-baris sebelumnya sempat berjalan.

Tiga Kesalahan Klasik #

Lupa Titik Dua #

Baris header seperti if wajib diakhiri titik dua. Tanpa titik dua, interpreter berhenti tepat di akhir kondisi:

python
stok = 5
if stok > 0
    print("Barang tersedia.")

Output yang Dihasilkan:

text
  File "stok.py", line 2
    if stok > 0
               ^
SyntaxError: expected ':'

Perbaikannya satu karakter: tambahkan : setelah 0.

Kutipan Tidak Tertutup #

Sudah kita lihat di bagian anatomi: unterminated string literal. Yang perlu diingat, tanda kutip pembuka dan penutup harus sama — "Halo ditutup ", 'Halo ditutup '.

Kurung Tidak Tertutup #

Tanda kurung yang dibuka tanpa pasangan baru dilaporkan di baris terakhir file, karena interpreter memastikan ketiadaan penutup setelah seluruh kode terbaca:

python
print("Halo, dunia!"

Output yang Dihasilkan:

text
  File "total.py", line 1
    print("Halo, dunia!"
         ^
SyntaxError: '(' was never closed

Kesalahan Umum Lainnya #

Beberapa pola kesalahan lain yang hampir selalu menimpa pemula, lengkap dengan pesan aslinya:

KesalahanContoh salahPesan Python
= untuk perbandinganif stok = 5:invalid syntax. Maybe you meant '==' or ':=' instead of '='?
print gaya Python 2print "Halo, dunia!"Missing parentheses in call to 'print'. Did you mean print(...)?
Karakter tidak dikenalprint(“Halo”)invalid character '“' (U+201C)
Indentasi tidak konsistencampuran tab dan spasiTabError: inconsistent use of tabs and spaces in indentation

Dua baris pertama pada tabel di atas memperlihatkan fitur paling membantu di Python modern: saran did you mean. Ketika interpreter mendeteksi kode yang mirip dengan kode yang sah, Python mengusulkan perbaikannya secara langsung — = diusulkan menjadi ==, dan print tanpa kurung langsung diusulkan bentuk print(...). Pola yang sama juga bekerja pada NameError: salah mengetik Print memunculkan Did you mean: 'print'?.

Kesalahan indentasi pada baris terakhir tabel sudah dibahas tuntas pada Chapter Indentasi dan Code Block, lengkap dengan cara membaca IndentationError dan TabError yang keduanya adalah turunan SyntaxError.

Menghadapi error adalah bagian tak terpisahkan dari menulis kode — programmer berpengalaman pun masih bertemu SyntaxError setiap minggunya. Bedanya, mereka membacanya dalam hitungan detik karena terbiasa dengan pola-pola di atas. Dengan section ini selesai, fondasi menulis dan menjalankan program Python sudah berdiri; Section berikutnya membahas variabel dan tipe data — cara program menyimpan dan mengolah nilai.