Python - Penanganan Eksepsi

Halo, para penyihir Python masa depan! Saya sangat senang menjadi pemandu Anda dalam perjalanan yang menarik ini ke dunia penanganan eksepsi Python. Sebagai seseorang yang telah mengajar pemrograman selama tahun-tahun, saya bisa memberitahu Anda bahwa memahami eksepsi adalah seperti belajar bersepeda dengan rakit penyusun - mungkin terlihat sulit pada awalnya, tetapi sekali Anda menguasainya, Anda akan berjalan lancar dalam waktu singkat!

Python - Exceptions

Apa itu Eksepsi?

Sebelum kita melompat ke dasar, mari kita mulai dengan yang dasar-dasar. Bayangkan Anda sedang membuat kue (tetap bersamaku di sini, saya berjanji ini berkaitan dengan Python!). Anda punya resep (kode Anda), bahan-bahan (data Anda), dan Anda sudah siap. Tetapi apa yang terjadi jika Anda kehabisan telur di tengah jalan? Itu adalah eksepsi dalam dunia memasak!

Di Python, eksepsi adalah kesalahan yang terjadi selama eksekusi program. Itu seperti tanda merah yang muncul dan mengatakan, "Woi! Ada yang tidak benar di sini!"

Mari kita lihat contoh sederhana:

print(10 / 0)

Jika Anda menjalankan kode ini, Python akan mengangkat ZeroDivisionError. Itu mengatakan, "Hey, Anda tidak bisa membagi dengan nol! Itu tidak diizinkan di dapur saya... Saya maksud, lingkungan pemrograman!"

Penanganan Eksepsi di Python

Sekarang bahwa kita tahu apa itu eksepsi, mari kita belajar bagaimana mengatasinya dengan sopan. Di Python, kita menggunakan blok try dan except untuk menangkap dan menangani eksepsi.

Inilah struktur dasarnya:

try:
# Kode yang mungkin mengangkat eksepsi
except jenisEksepsi:
# Kode untuk menangani eksepsi

Mari kita modifikasi contoh sebelumnya:

try:
hasil = 10 / 0
print(hasil)
except ZeroDivisionError:
print("Ups! Anda tidak bisa membagi dengan nol.")

Ketika Anda menjalankan kode ini, bukannya kres, itu akan mencetak: "Ups! Anda tidak bisa membagi dengan nol."

klausa except Tanpa Eksepsi

Terkadang, Anda mungkin ingin menangkap semua eksepsi yang terjadi. Dalam kasus ini, Anda dapat menggunakan klausa except tanpa menentukan jenis eksepsi:

try:
# Beberapa kode berisiko
x = int(input("Masukkan angka: "))
y = 10 / x
print(y)
except:
print("Ada yang salah!")

Ini akan menangkap semua eksepsi yang terjadi di blok try. Namun, secara umum lebih baik untuk menangkap eksepsi spesifik saat Anda bisa, karena itu membuat kode Anda lebih presis dan lebih mudah untuk 디버깅.

klausa except Dengan Beberapa Eksepsi

Anda juga dapat menangani beberapa eksepsi dalam satu klausa except:

try:
x = int(input("Masukkan angka: "))
y = 10 / x
print(y)
except (ValueError, ZeroDivisionError):
print("Input tidak valid atau pembagian oleh nol!")

Kode ini akan menangkap kedua ValueError (jika pengguna memasukkan nilai non-angka) dan ZeroDivisionError.

klausa try-finally

klausa finally digunakan untuk kode yang harus dieksekusi terlepas dari apakah terjadi eksepsi atau tidak. Itu seperti regu pembersihan setelah pesta - itu selalu muncul, terlepas dari bagaimana pesta berlangsung!

try:
f = open("contoh.txt", "r")
# Lakukan beberapa operasi pada file
except FileNotFoundError:
print("File tidak ada!")
finally:
f.close()  # Ini akan selalu dieksekusi, bahkan jika terjadi eksepsi

Argumen Eksepsi

Eksepsi dapat membawa informasi tambahan. Anda dapat mengakses informasi ini di blok except Anda:

try:
x = 10 / 0
except ZeroDivisionError as e:
print(f"Terjadi kesalahan: {e}")

Ini akan mencetak: "Terjadi kesalahan: pembagian oleh nol"

Mengangkat Eksepsi

Terkadang, Anda mungkin ingin mengangkat eksepsi sendiri. Itu seperti menjadi wasit dalam pertandingan dan mendeklarasikan pelanggaran:

def cek_usia(usia):
if usia < 0:
raise ValueError("Umur tidak bisa negatif!")
print(f"Umur Anda adalah {usia}")

try:
cek_usia(-5)
except ValueError as e:
print(e)

Ini akan mencetak: "Umur tidak bisa negatif!"

Eksepsi Yang Ditentukan Pengguna

Anda juga dapat membuat tipe eksepsi Anda sendiri. Itu seperti menciptakan aturan baru dalam permainan:

class TerlaluBanyakPizzaError(Exception):
pass

def pesan_pizza(jumlah):
if jumlah > 100:
raise TerlaluBanyakPizzaError("Anda tidak bisa memesan lebih dari 100 pizza!")
print(f"Order untuk {jumlah} pizza berhasil.")

try:
pesan_pizza(101)
except TerlaluBanyakPizzaError as e:
print(e)

Assertions di Python

Assertions adalah cara untuk memastikan bahwa kondisi tertentu dipenuhi. Mereka seperti titik pemeriksaan kecil di kode Anda:

def bagi(a, b):
assert b != 0, "Pembagi tidak bisa nol!"
return a / b

try:
hasil = bagi(10, 0)
except AssertionError as e:
print(e)

Ini akan mencetak: "Pembagi tidak bisa nol!"

Eksepsi Standar

Python datang dengan sekumpulan eksepsi bawaan. Berikut adalah beberapa yang paling umum:

Nama Eksepsi Deskripsi
ZeroDivisionError Diangkat saat pembagian atau modulo oleh nol terjadi
ValueError Diangkat saat fungsi mendapat argumen jenis yang benar tetapi nilai yang tidak benar
TypeError Diangkat saat operasi atau fungsi diterapkan ke objek jenis yang tidak sesuai
NameError Diangkat saat nama lokal atau global tidak ditemukan
FileNotFoundError Diangkat saat file atau direktori diminta tetapi tidak ada
IndexError Diangkat saat subskripsi urutan di luar jangkauan
KeyError Diangkat saat kunci kamus tidak ditemukan
ImportError Diangkat saat pernyataan impor gagal

Dan itu adalah, teman-teman! Anda baru saja menyelesaikan kelas kencang Anda dalam penanganan eksepsi Python. Ingat, eksepsi bukan musuh Anda - mereka lebih seperti papan tanda yang membantu mengarahkan Anda ke kode yang lebih baik dan lebih robust. Tetap latihan, tetap eksperimen, dan segera Anda akan menangani eksepsi seperti seorang profesional. Selamat coding!

Credits: Image by storyset