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()atautry, 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.withotomatis menutup file (f.close()) di akhir blok. Bahkan kalau error di tengah.FileNotFoundErrorditangkap biar program nggak crash dengan traceback merah menakutkan.
Tips kelas: Selalu pakai
with. siswa yangf = open(...)lalu lupaf.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.DictReaderbaca header otomatis → jadidictper baris:{"nama": "Andi", "tugas": "85", ...}.int(row["tugas"])ubah string jadi angka biar bisa dihitung.- Tiga
exceptberbeda: FileNotFoundError→ file hilangKeyError→ kolom header salah/tidak adaValueError→ 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()pakaiwhile True+try-except→ loop sampai input valid. Pola ini sering dipakai.ZeroDivisionErrorditangkap terpisah dariValueError— 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:
tryitu kita jalan di atas talang.exceptitu 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,
finallyitu tanda kalau programmer sudah mikir cleanup. Bukan cuma “biar jalan”.
Ringkasan Cepat — Simpan di Dinding
| Mode | Arti | Efek ke File Lama |
|---|---|---|
"r" | Read | Aman |
"w" | Write | TERHAPUS |
"a" | Append | Aman, nambah di bawah |
"r+" | Read + Write | Aman, pointer di awal |
| Exception | Kapan Muncul |
|---|---|
FileNotFoundError | File tidak ada (mode "r") |
PermissionError | Tidak punya izin baca/tulis |
ValueError | Konversi gagal: int("abc") |
ZeroDivisionError | Bagi nol |
KeyError | Akses key yang tidak ada di dict |
IndexError | Akses 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. 🤝