Menu
CoddyTech

Apa Itu Exception Handling?

Exception handling adalah cara sebuah program menanggapi error yang terjadi saat program berjalan. Kode yang mungkin gagal ditaruh di blok yang dilindungi, seperti try, dan saat sebuah error dimunculkan, kendali melompat ke handler, seperti except atau catch, alih-alih membuat program crash.

Oleh Kevin Spektor, Co-founder & CTO

Diperbarui 24 September 2026

Program yang menanyakan umur orang cepat atau lambat akan menerima "twenty", bukan 20. Mengonversi teks itu adalah runtime error: int("twenty") memunculkan ValueError, dan tanpa rencana untuk menghadapinya, program berhenti. Exception handling adalah rencana itu. Kamu menandai kode yang mungkin gagal dan menulis kode yang dijalankan kalau kegagalan itu terjadi.

Next year you will be 35
Not a number: twenty
Next year you will be 20
Done

Jawaban yang salah dilaporkan, dan loop lanjut ke jawaban berikutnya. Tanpa try, program akan mencetak satu baris lalu sebuah traceback.

Cara kerja exception handling

  1. Kode di dalam try berjalan seperti biasa.
  2. Sebuah operasi gagal, dan runtime memunculkan exception: sebuah objek dengan tipe (ValueError) dan pesan (invalid literal for int() with base 10: 'twenty').
  3. Blok try berhenti di baris itu. Baris-baris sisanya dilewati, itulah sebabnya "Next year you will be" tidak tercetak untuk "twenty".
  4. Runtime membandingkan tipe exception itu dengan setiap klausa except, dari atas ke bawah, lalu menjalankan yang pertama cocok.
  5. Setelah handler selesai, program lanjut ke baris pertama setelah seluruh pernyataan try.
  6. Kalau tidak ada klausa yang cocok, exception keluar dari fungsi saat ini dan pencarian berlanjut di fungsi yang memanggilnya, lalu di pemanggil fungsi itu. Ini disebut unwinding call stack. Kalau pencarian sampai ke puncak program tanpa ada yang cocok, program berakhir dengan traceback.

Langkah 6 berarti handler tidak harus berada di fungsi tempat error terjadi. Di sini kegagalannya terjadi dua panggilan lebih dalam, dan handler di bagian bawah tetap menangkapnya:

parsing 4.50
parsing free
Could not add the prices: could not convert string to float: 'free'

float("free") gagal di dalam parse_price. Baik parse_price maupun total tidak punya handler, jadi keduanya ditinggalkan, dan "3.20" tidak pernah di-parse. Inilah pilihan desain utama yang diberikan exception handling: tangani error di tempat kamu tahu harus berbuat apa, yang sering kali jauh dari tempat error itu terjadi.

try, except, else, dan finally

Pernyataan try di Python punya dua bagian opsional lagi. else hanya berjalan kalau blok try selesai tanpa exception. finally berjalan dalam setiap kasus: setelah berhasil, setelah exception ditangani, dan bahkan saat fungsi melakukan return dari dalam try.

no error
finally runs either way
2.0
b was zero
finally runs either way
None

finally adalah tempat untuk pembersihan: menutup file, melepas lock, menutup koneksi database. Di Python, pernyataan with melakukan pembersihan ini untuk file secara otomatis, dan biasanya itulah pilihan untuk file.

Memunculkan exception sendiri

Exception bukan hanya untuk error yang dideteksi bahasanya. Saat fungsimu sendiri menerima input yang tidak bisa diolahnya, fungsi itu bisa memunculkan exception untuk menolaknya, dan pemanggilnya yang memutuskan apa yang terjadi selanjutnya. Mendefinisikan class exception kecil memberi error itu nama yang menjelaskannya.

70
Refused: cannot take 250, balance is 100

Python memakai raise. Java, C++, dan JavaScript memakai throw untuk hal yang sama.

Exception handling di bahasa lain

BahasaKata kunciYang perlu diketahui
Pythontry, except, else, finally, raiseSetiap exception adalah objek yang mewarisi BaseException
Javatry, catch, finally, throw, throwsChecked exception seperti IOException harus ditangkap atau dideklarasikan dengan throws
C++try, catch, throwTidak ada finally; destructor yang membersihkan saat stack di-unwind
JavaScripttry, catch, finally, throwError di kode async ditangkap dengan try di sekitar await
Ctidak adaFungsi mengembalikan kode error, dan banyak yang mengisi errno
Gotidak ada untuk error biasaFungsi mengembalikan nilai error yang diperiksa pemanggilnya

Contoh parsing yang sama di Java terlihat seperti ini:

try {
    int age = Integer.parseInt("twenty");
    System.out.println(age + 1);
} catch (NumberFormatException e) {
    System.out.println("Not a number: " + e.getMessage());
} finally {
    System.out.println("done");
}

Java membagi exception menjadi dua kelompok. Checked exception, seperti IOException, menggambarkan masalah di luar kendali program, dan compiler menolak membangun kode yang tidak menangkap maupun mendeklarasikannya. Unchecked exception, yaitu subclass dari RuntimeException seperti NullPointerException, biasanya berarti ada bug, dan compiler tidak memaksamu untuk menanganinya.

Kesalahan yang umum

  • Menangkap semuanya. except: tanpa tipe di Python juga menangkap KeyboardInterrupt, sehingga Ctrl+C berhenti berfungsi, dan except Exception: menangkap bug yang tidak pernah kamu rencanakan. Tangkap tipe spesifik yang kamu tahu cara menanganinya.
  • Menelan error-nya. except ValueError: pass menyembunyikan masalahnya. Paling tidak, cetak atau catat di log apa yang salah.
  • Blok try yang terlalu besar. Bungkus hanya baris-baris yang bisa memunculkan exception yang sedang kamu tangkap, supaya error yang tidak berkaitan tidak tertangani secara tidak sengaja.
  • Menangkap bug alih-alih memperbaikinya. IndexError dari loop yang berjalan satu langkah terlalu jauh adalah kesalahan di kode. Menanganinya justru membuat kode yang salah itu tetap hidup.
  • Mengira catch bisa mencegah crash di C atau C++. Segmentation fault adalah sinyal dari sistem operasi, bukan exception, dan di Linux dan macOS, catch (...) di C++ tidak pernah melihatnya.

Lanjut ke mana

Error yang ditanggapi exception handling dijelaskan di halaman runtime error, dan crash yang tidak bisa ditangkapnya di halaman segmentation fault. Untuk sintaks lengkapnya, baca panduan exception Python, try dan catch di Java, exception C++, dan try dan catch di JavaScript. Kursus Java dan kursus Python sama-sama melatihnya dengan latihan sungguhan.

Pertanyaan yang sering diajukan

Apa saja 5 kata kunci exception handling di Java?
try, catch, finally, throw, dan throws. try menandai kode yang diawasi, catch menangani jenis exception tertentu, dan finally menjalankan kode pembersihan, entah ada exception atau tidak. throw memunculkan sebuah exception, dan throws di signature method menyatakan checked exception mana saja yang bisa diteruskan method itu ke pemanggilnya.
Apa itu exception handling di C++?
C++ memakai try, catch, dan throw. Tipe apa pun bisa di-throw, tetapi menurut konvensi kamu melempar objek turunan std::exception, seperti std::runtime_error, dan menangkapnya lewat referensi: catch (const std::exception& e). C++ tidak punya finally; pembersihan terjadi di destructor, yang berjalan otomatis saat stack di-unwind.
Apa bedanya error dan exception?
Dalam pemakaian sehari-hari, error adalah apa pun yang salah, dan exception adalah objek yang dipakai sebuah bahasa untuk melaporkannya. Java membuat batas yang lebih tegas: Exception mencakup masalah yang wajar ditangani program, sedangkan Error, seperti OutOfMemoryError atau StackOverflowError, menandakan kegagalan JVM yang biasanya tidak perlu dicoba ditangkap oleh program. Di Python, ValueError dan ZeroDivisionError sama-sama exception meskipun namanya begitu.
Apa bedanya throw dan throws di Java?
throw adalah pernyataan yang memunculkan satu exception di titik itu: throw new IllegalArgumentException("negative age");. throws adalah bagian dari deklarasi method yang mendaftar checked exception yang bisa diteruskan method itu ke pemanggilnya: void load() throws IOException. Compiler lalu mewajibkan setiap pemanggil untuk menangkap exception itu atau ikut mendeklarasikannya.
Apakah exception handling membuat kode lebih lambat?
Masuk ke blok try itu murah di sebagian besar bahasa modern. Sejak Python 3.11, try hampir tidak memakan biaya apa pun saat tidak ada exception yang dimunculkan, dan compiler C++ utama tidak menambahkan biaya runtime pada jalur di mana tidak ada yang di-throw. Memunculkan dan menangkap exception jauh lebih lambat daripada pengujian if, jadi di loop yang kritis untuk performa, periksa kasus-kasus yang umum alih-alih mengandalkan exception.
Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai