pythonerrorMenengah5 mnt baca

Error Handling: try/except/else/finally

Bikin skrip data yang tidak gampang mati: tangkap error dengan elegan, kenali error khas data, dan tutup resource dengan benar.

Sabuk Pengaman untuk Skrip Datamu

Skrip analisis tanpa error handling itu seperti mengemudi tanpa sabuk pengaman. Lancar-lancar saja sampai satu baris data rusak menabrak semuanya, dan program berhenti di tengah jalan tanpa pesan yang jelas.

Kenapa penting untuk data analyst? Karena kamu memproses ribuan baris dari sumber yang tidak kamu kendalikan: file Excel dari tim lain, API yang kadang timeout, kolom angka yang ternyata berisi teks. Error handling mengubah crash misterius menjadi pesan yang bisa ditindaklanjuti, dan seringkali membuat skrip tetap jalan sambil mencatat baris bermasalah.

Anatomi Lengkap: try/except/else/finally

Empat blok ini punya peran masing-masing yang rapi.

python
try:
    angka = int(input("Masukkan angka: "))
except ValueError:
    print("Itu bukan angka yang valid!")
else:
    print(f"Kuadratnya: {angka ** 2}")
finally:
    print("Program selesai.")

Alurnya: try berisi kode berisiko, except jalan kalau error terjadi, else jalan kalau TIDAK ada error (tempat yang tepat untuk logika lanjutan), finally SELALU jalan untuk beres-beres.

Contoh yang lebih dekat ke data, membaca file dengan aman:

python
try:
    with open("penjualan.csv") as f:
        baris = f.readlines()
except FileNotFoundError:
    print("File penjualan.csv tidak ditemukan, cek nama filenya.")
else:
    print(f"Berhasil baca {len(baris)} baris.")

Tiga Error yang Paling Sering Ditemui Analyst

Hafalkan tiga ini karena mereka akan jadi teman (atau musuh) harianmu.

python
# 1. ValueError: konversi tipe gagal
try:
    harga = int("12a500")  # ada huruf nyempil
except ValueError:
    print("Gagal konversi: ada karakter non-angka")

# 2. KeyError: kunci dictionary tidak ada
data = {"nama": "Budi", "umur": 25}
try:
    print(data["kota"])
except KeyError:
    print("Kolom 'kota' tidak ada di data ini")

# 3. FileNotFoundError: file tidak ketemu
try:
    open("data_2024.xlsx")
except FileNotFoundError:
    print("File tidak ditemukan, periksa path-nya")

Pola realistis, memproses list data kotor tanpa berhenti di baris rusak:

python
data_kotor = ["15000", "20000", "rusak", "30000", "", "25000"]
bersih = []
gagal = []

for item in data_kotor:
    try:
        bersih.append(int(item))
    except ValueError:
        gagal.append(item)

print(f"Bersih: {bersih}")  # [15000, 20000, 30000, 25000]
print(f"Gagal: {gagal}")    # ['rusak', '']

Catatan teknis: except Exception menangkap hampir semua error, tapi menangkap BaseException juga akan menelan KeyboardInterrupt (Ctrl+C), sehingga program jadi susah dihentikan paksa. Tangkap error yang spesifik sebisa mungkin.

Jebakan Umum

SALAH, except kosong yang menelan semua error diam-diam:

python
# Jangan: error hilang tanpa jejak, debugging jadi mimpi buruk
try:
    hasil = 100 / 0
except:
    pass

BENAR, tangkap spesifik dan beri pesan atau catat:

python
# Lakukan: error tercatat, program tetap jalan
try:
    hasil = 100 / 0
except ZeroDivisionError as e:
    print(f"Pembagian nol terdeteksi: {e}")
    hasil = 0

SALAH, menaruh logika normal di dalam try:

python
# Jangan: blok try terlalu gemuk, susah tahu baris mana yang error
try:
    data = open("data.csv").read()
    baris = data.splitlines()
    total = sum(int(b) for b in baris)
    rata = total / len(baris)
    print(f"Rata-rata: {rata}")
except Exception:
    print("Ada yang salah")

BENAR, try seminimal mungkin, logika di else:

python
# Lakukan: hanya operasi berisiko di try
try:
    data = open("data.csv").read()
except FileNotFoundError:
    print("File tidak ada")
else:
    baris = data.splitlines()
    total = sum(int(b) for b in baris)
    print(f"Rata-rata: {total / len(baris)}")

Tantangan

Pembersih data dengan pencatat error

Buat fungsi bersihkan_angka(daftar) yang mengubah tiap string menjadi integer. String yang gagal konversi (ValueError) jangan membuat fungsi berhenti, tapi dikumpulkan ke list gagal. Fungsi mengembalikan tuple (list_bersih, list_gagal). Uji dengan ["10", "xx", "20", "", "30"].

Kuis Bab

Uji pemahamanmu: Bab 2: Alur Program dan Fungsi

Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".

1.Angka apa saja yang dihasilkan list(range(2, 10, 3))?

2.Apa beda break dan continue di dalam loop?

3.Apa hasil dari [x * 2 for x in range(4)]?

4.Kapan blok else pada try/except/else dijalankan?

5.Apa yang dikembalikan fungsi yang tidak punya pernyataan return?