Langsung ke konten

Syntax Error vs Exception di Python: Apa Bedanya?

Syntax error muncul saat kode tidak bisa dibaca Python, exception muncul saat program berjalan. Artikel ini membahas perbedaannya dan cara membaca traceback.

Belajar Python Level Basic
Belajar Python Level Basic
Advertisement

Artikel ini bagian dari seri Belajar Python Level Basic di hanifmu.com. Di artikel sebelumnya kita sudah membahas Lambda Function. Sekarang kita berhenti sebentar dari menulis fitur baru dan belajar membaca kesalahan.

Setiap programmer pasti pernah menemui kode yang berhenti di tengah jalan. Pesan merah di terminal itu bukan tanda kegagalanmu, melainkan petunjuk. Ada dua jenis masalah yang paling sering muncul: syntax error dan exception.

Dua Jenis Kesalahan

Python membedakan kesalahan menjadi dua berdasarkan kapan kesalahan itu terdeteksi.

Syntax error terjadi sebelum program berjalan. Python membaca seluruh file lebih dulu, dan kalau ada aturan penulisan yang dilanggar, program tidak akan pernah dieksekusi.

Exception terjadi saat program sudah berjalan. Kodenya ditulis dengan benar, tapi ada situasi yang tidak terduga saat eksekusi, misalnya membagi angka dengan nol atau membuka file yang tidak ada.

Perbedaan ini penting karena penanganannya berbeda. Syntax error harus diperbaiki di kode, sedangkan exception bisa ditangani agar program tetap berjalan.

Syntax Error

Syntax error muncul ketika penulisan kode tidak sesuai aturan Python. Contoh paling sederhana adalah lupa tanda kurung:

print("Halo"

Kalau dijalankan, Python langsung menolak:

  File "contoh.py", line 1
    print("Halo"
         ^
SyntaxError: '(' was never closed

Perhatikan tanda ^. Python menunjuk ke bagian yang dianggap bermasalah. Pesan '(' was never closed memberi tahu bahwa ada tanda kurung yang dibuka tapi tidak ditutup.

Contoh syntax error lain yang sering terjadi:

# Lupa titik dua setelah if
if x > 5
    print("besar")

# Salah indentasi
def sapa():
print("Halo")
# Salah penulisan keyword
pritn("Halo")

Ciri khas syntax error adalah program tidak pernah sampai menampilkan output apa pun. Python berhenti sebelum baris pertama dijalankan.

Exception

Exception baru muncul saat program berjalan. Kode lolos pemeriksaan sintaks, tapi ada operasi yang gagal di tengah jalan:

angka = 10
pembagi = 0

print(angka / pembagi)
Traceback (most recent call last):
  File "contoh.py", line 4, in <module>
    print(angka / pembagi)
ZeroDivisionError: division by zero

Kode di atas tidak salah tulis. Python mengerti maksudnya. Masalahnya baru ketahuan saat baris itu benar-benar dijalankan.

Membaca Traceback

Saat exception terjadi, Python menampilkan traceback, laporan yang menunjukkan di mana kesalahan muncul. Banyak pemula panik melihatnya padahal isinya sangat membantu.

Bacalah dari bawah ke atas. Baris terakhir berisi jenis exception dan penjelasannya:

ZeroDivisionError: division by zero

Di atasnya ada lokasi kejadian, lengkap dengan nama file, nomor baris, dan potongan kode:

  File "contoh.py", line 4, in <module>
    print(angka / pembagi)

Kalau kode kamu memanggil function, traceback akan menampilkan rantai pemanggilannya. Bagian paling bawah adalah tempat kesalahan terjadi, bagian paling atas adalah tempat program dimulai.

Contoh traceback dengan beberapa lapis:

def bagi(a, b):
    return a / b

def hitung():
    return bagi(10, 0)

hitung()
Traceback (most recent call last):
  File "contoh.py", line 7, in <module>
    hitung()
  File "contoh.py", line 5, in hitung
    return bagi(10, 0)
  File "contoh.py", line 2, in bagi
    return a / b
ZeroDivisionError: division by zero

Dari laporan ini kita tahu urutannya: hitung() dipanggil, ia memanggil bagi(), dan di sanalah pembagian dengan nol terjadi. Tanpa traceback, kita harus menebak-nebak.

Exception Umum di Python

Beberapa exception berikut akan sering kamu temui. Mengenali namanya mempercepat proses mencari penyebab.

ExceptionPenyebab umum
ValueErrorNilai benar tipe tapi tidak valid, misalnya int("abc")
TypeErrorTipe data tidak cocok, misalnya "5" + 5
NameErrorMemakai variabel yang belum dibuat
IndexErrorIndeks di luar jangkauan list
KeyErrorKey tidak ada di dictionary
ZeroDivisionErrorPembagian dengan nol
FileNotFoundErrorFile yang dibuka tidak ditemukan

Mari lihat beberapa di antaranya:

# ValueError
angka = int("abc")
# ValueError: invalid literal for int() with base 10: 'abc'
# TypeError
hasil = "5" + 5
# TypeError: can only concatenate str (not "int") to str
# IndexError
buah = ["apel", "jeruk"]
print(buah[5])
# IndexError: list index out of range
# KeyError
siswa = {"nama": "Budi"}
print(siswa["umur"])
# KeyError: 'umur'

Pesan-pesan ini sebenarnya sudah menjelaskan masalahnya. Yang perlu dilatih hanyalah kebiasaan membacanya dengan tenang.

Kesalahan Umum Pemula

  • Panik melihat traceback — baca dari baris terakhir, di situ ada nama exception dan penjelasannya.
  • Mengira semua error sama — syntax error dan exception punya penyebab dan penanganan berbeda.
  • Menebak tanpa membaca pesan — pesan error biasanya menyebut persis apa yang salah.
  • Mengabaikan nomor baris — nomor baris di traceback menunjuk langsung ke lokasi masalah.
  • Mengira exception berarti program rusak — exception adalah kejadian normal yang bisa ditangani.

Ringkasan

  • Syntax error terjadi sebelum program berjalan karena aturan penulisan dilanggar
  • Exception terjadi saat program berjalan karena ada situasi tak terduga
  • Traceback adalah laporan lokasi dan jenis kesalahan, baca dari bawah ke atas
  • ValueError, TypeError, NameError, IndexError, dan KeyError termasuk exception yang paling sering muncul
  • Pesan error adalah petunjuk, bukan hukuman

Langkah Selanjutnya

Sekarang kamu sudah bisa membaca kesalahan dengan lebih tenang. Tapi membaca saja belum cukup. Program yang baik tidak berhenti begitu saja saat menemui exception.

Artikel selanjutnya membahas try, except, dan finally di Python, cara menangani error agar program tetap berjalan.