python 12 July 2026

Bagian 8: Bikin Python Ingat – File & Error Handling yang Bikin Tenang

Bagian 8: Bikin Python Ingat – File & Error Handling yang Bikin Tenang

Saat ini, program kalian cuma hidup di memori. Dijalankan, keluar output, selesai. Lalu? Hilang. Seperti percakapan yang tidak pernah dicatat.

Hari ini kita bikin Python ingat. Dan — lebih penting — bikin Python tidak panik kalau hal tak terduga terjadi.

Catatan dari kelas: Siswa paling bingung bukan syntax open() atau try, tapi kapan harus dipakai. Jawabannya sederhana: selalu. Data itu rapuh. Manusia itu salah. Kita jaga keduanya.


Membaca File: Membuka Pintu, Bukan Memecahkannya

Bayangkan file teks seperti buku catatan. open() itu kunci. with itu tangan yang menutup pintu otomatis — meskipun kalian lupa, meskipun error, meskipun listedrik mati.

# baca_catatan.py
# Versi paling aman & rapi: pakai 'with'

nama_file = "catatan_kelas.txt"

try:
    with open(nama_file, "r", encoding="utf-8") as f:
        isi = f.read()
        print("=== Isi Catatan ===")
        print(isi)
except FileNotFoundError:
    print(f"File '{nama_file}' tidak ditemukan. Belum ada catatan hari ini.")

Penjelasan:

  • "r" = read mode. Hanya baca, jangan ubah.
  • encoding="utf-8" — wajib. Tanpa ini, huruf seperti é, ñ, atau emoji jadi znak aneh.
  • with otomatis menutup file (f.close()) di akhir blok. Bahkan kalau error di tengah.
  • FileNotFoundError ditangkap biar program nggak crash dengan traceback merah menakutkan.

Tips kelas: Selalu pakai with. siswa yang f = open(...) lalu lupa f.close() itu seperti buka kulkas lalu pergi — dingin keluar, listrik boros, isi busuk.


Menulis File: Menjatuhkan Tinta yang Tidak Bisa Dihapus

Menulis itu keputusan. Mode "w" (write) menghapus isi lama. Mode "a" (append) menambah di belakang. Pilih salah satu — jangan campur.

# tulis_absen.py
# Simpan kehadiran hari ini

tanggal = "2025-01-15"
hadir = ["Andi", "Budi", "Citra", "Dewi", "Eko"]

with open("absen_kelas.txt", "a", encoding="utf-8") as f:
    f.write(f"\n--- Absen {tanggal} ---\n")
    for i, nama in enumerate(hadir, 1):
        f.write(f"{i}. {nama}\n")

print("Absen tersimpan. Pulang tenang.")

Penjelasan:

  • "a" = append. File lama aman. Baris baru nempel di bawah.
  • \n = newline. Tanpa ini, semua nempel jadi satu baris panjang.
  • enumerate(hadir, 1) biar nomor mulai dari 1, bukan 0.

Peringatan: Kalau pakai "w" di file yang sudah berisi data penting — data itu hilang selamanya. Tidak ada undo. Seperti menghapus kenangan dengan penghapus karet.


Membaca CSV: Data yang Terstruktur, Bukan Kacau

CSV (Comma-Separated Values) itu seperti Excel tapi versi mentah — pakai koma, tidak pakai warna. Python punya modul csv biar nggak perlu split manual.

# baca_nilai.py
# Membaca file CSV nilai siswa

import csv

nama_file = "nilai_rpl.csv"

try:
    with open(nama_file, "r", encoding="utf-8") as f:
        reader = csv.DictReader(f)  # baca sebagai dictionary per baris
        print(f"{'Nama':<15} {'Tugas':>6} {'UTS':>6} {'UAS':>6} {'Rata':>6}")
        print("-" * 45)

        for row in reader:
            nama = row["nama"]
            tugas = int(row["tugas"])
            uts = int(row["uts"])
            uas = int(row["uas"])
            rata = (tugas + uts + uas) / 3
            print(f"{nama:<15} {tugas:>6} {uts:>6} {uas:>6} {rata:>6.2f}")

except FileNotFoundError:
    print("File nilai belum ada. Minta ketua kelas buatkan.")
except KeyError as e:
    print(f"Kolom CSV tidak lengkap: {e}. Cek header: nama,tugas,uts,uas")
except ValueError:
    print("Ada nilai non-angka di file. Cek lagi datanya.")

Penjelasan:

  • csv.DictReader baca header otomatis → jadi dict per baris: {"nama": "Andi", "tugas": "85", ...}.
  • int(row["tugas"]) ubah string jadi angka biar bisa dihitung.
  • Tiga except berbeda:
  • FileNotFoundError → file hilang
  • KeyError → kolom header salah/tidak ada
  • ValueError → isi kolom bukan angka (misal: "tugas": "lima puluh")

Pengalaman nyata: Siswa sering bikin CSV di Excel lalu Save As → CSV. Tapi kadang pakai titik koma (;) bukan koma (,) — tergantung setting regional Windows. Kalau error, buka pakai Notepad, cek pemisahnya.


Try-Except: Menangkap Jatuhan Sebelum Menyentuh Tanah

Program yang bagus bukan yang nggak pernah error. Program yang bagus siap kalau error.

# kalkulator_aman.py
# Contoh lengkap: input, file, error handling

def baca_angka(pesan):
    while True:
        try:
            return float(input(pesan))
        except ValueError:
            print("  → Itu bukan angka. Coba lagi.")

def hitung_dan_simpan():
    print("=== Kalkulator Sederhana ===")
    a = baca_angka("Masukkan angka pertama: ")
    b = baca_angka("Masukkan angka kedua: ")

    try:
        hasil = a / b
    except ZeroDivisionError:
        print("  → Tidak bisa dibagi nol. Operasi dibatalkan.")
        return

    # Simpan riwayat
    with open("riwayat_kalkulator.txt", "a", encoding="utf-8") as f:
        f.write(f"{a} / {b} = {hasil:.2f}\n")

    print(f"Hasil: {hasil:.2f}")
    print("Tersimpan ke riwayat_kalkulator.txt")

if __name__ == "__main__":
    hitung_dan_simpan()

Penjelasan:

  • baca_angka() pakai while True + try-exceptloop sampai input valid. Pola ini sering dipakai.
  • ZeroDivisionError ditangkap terpisah dari ValueError — biar pesan error spesifik.
  • if __name__ == "__main__": → biar kode ini jalan kalau di-run langsung, tapi nggak jalan kalau di-import ke file lain. Biasakan sejak sekarang.

Metafora: try itu kita jalan di atas talang. except itu jaring pengaman di bawah. Kita harap nggak perlu, tapi wajib pasang.


Pola Lanjutan: else & finally — Yang Jarang Dibahas Tapi Penting

# pola_lengkap.py
# else: jalan KALAU tidak error
# finally: jalan SELALU (error atau tidak)

try:
    with open("config.txt", "r") as f:
        config = f.read()
except FileNotFoundError:
    print("Config tidak ditemukan, pakai default.")
    config = "default"
else:
    print("Config berhasil dibaca.")
finally:
    print("Ini finally — jalan terakhir, buat rappi/logout/cleanup.")
    print("Program selesai.\n")

Kapan pakai finally?

  • Tutup koneksi database
  • Hapus file temporary
  • Catat log “program selesai”
  • Lepas lock file

Tips: Di mundo kerja, finally itu tanda kalau programmer sudah mikir cleanup. Bukan cuma “biar jalan”.


Ringkasan Cepat — Simpan di Dinding

ModeArtiEfek ke File Lama
"r"ReadAman
"w"WriteTERHAPUS
"a"AppendAman, nambah di bawah
"r+"Read + WriteAman, pointer di awal
ExceptionKapan Muncul
FileNotFoundErrorFile tidak ada (mode "r")
PermissionErrorTidak punya izin baca/tulis
ValueErrorKonversi gagal: int("abc")
ZeroDivisionErrorBagi nol
KeyErrorAkses key yang tidak ada di dict
IndexErrorAkses index di luar jangkauan list

Kalian sudah punya bekal: Python yang ingat (file), dan Python yang tenang (error handling).

Satu baris kode yang ditulis hari ini, bisa jadi yang menyelamatkan proyek besok. Atau minimal — bikin kalian tidur nyenyak karena tahu program nggak akan crash di tengah malam.

File adalah memori. Exception adalah kehidupan. Kita tulis keduanya dengan hati yang siap.


Bagian 8 selesai.
Seri “Belajar Dasar Python untuk Pemula (SMK RPL)” — SELESAI.

Tapi belajar? Belum. Mulai sekarang, kalian yang nulis cerita sendiri.

Sampai jumpa di proyek nyata. 🤝