Membaca Berkas dan Menangani Masukan Salah

Ubah baris teks menjadi angka dan tangani kesalahan yang bisa diperkirakan.

Mapel
Pemrograman
Jenjang
SMA
Waktu baca
3 menit
Terbit
8 Oktober 2026

Tujuan belajar

Kamu dapat membaca berkas teks dengan with, mengubah isi menjadi bilangan, serta membedakan kesalahan data dari kesalahan program.

Bekal awal

Kamu memahami string, list, for, dan fungsi int. Kamu dapat membaca pesan galat sederhana dari Python.

Dari berkas ke nilai

Program sering menerima data dari berkas, bukan dari angka yang ditulis langsung dalam kode. Berkas teks berisi karakter. Walaupun satu baris tampak seperti 12, Python membacanya sebagai string; gunakan int setelah membersihkan spasi atau karakter baris baru dengan strip. Bentuk with open(..., encoding="utf-8") as berkas membuka berkas dan menutupnya secara otomatis setelah blok selesai. Nama berkas dan encoding harus dipilih sesuai sumber data.

Data di dunia nyata bisa kosong atau rusak. int("apel") menimbulkan ValueError. Penanganan try–except dapat memutuskan tindakan yang masuk akal, misalnya melewati satu baris rusak sambil melaporkan nomor baris. Tangkap jenis kesalahan yang memang diperkirakan. Jangan memakai except tanpa jenis dan diam saja; tindakan itu bisa menyembunyikan kesalahan penulisan kode yang perlu diperbaiki. Untuk latihan pertama, kita gunakan daftar string agar jejak dapat dihitung tanpa membuat berkas. Sesudah logikanya jelas, barulah daftar itu diganti dengan pembacaan berkas.

Contoh kerja 1: data angka bercampur

baris = ["12", " 8 ", "apel", "5"]
total = 0
for teks in baris:
    try:
        total += int(teks.strip())
    except ValueError:
        print("Lewati:", teks)
print("Total:", total)

Jejak: "12" menambah total menjadi 12; " 8 " dibersihkan lalu menambah menjadi 20; "apel" gagal diubah dan menghasilkan “Lewati: apel”, total tetap 20; "5" menambah menjadi 25. Keluaran terakhir “Total: 25”. Kesalahan satu baris tidak menghapus pekerjaan pada baris lain.

Contoh kerja 2: membaca daftar asli

with open("angka.txt", encoding="utf-8") as berkas:
    angka = [int(baris.strip()) for baris in berkas]
print(sum(angka))

Jika angka.txt berisi tiga baris 3, 7, dan 10, list menjadi [3, 7, 10] dan keluar “20”. Contoh ini menganggap semua baris valid. Jika ada “apel”, konversi gagal dan perlu strategi seperti contoh pertama. Jika berkas tidak ditemukan, muncul FileNotFoundError; periksa nama dan lokasi berkas terlebih dahulu sebelum menambah penanganan khusus.

Kesalahan umum dan debugging

Jangan mengira strip mengubah “apel” menjadi angka; ia hanya membuang ruang di tepi teks. Jangan menelan semua kesalahan dengan except umum, sebab salah ketik variabel dan data buruk memerlukan perbaikan berbeda. Saat mendapati galat, baca jenisnya dan nomor baris. Buat berkas uji yang kecil: dua angka benar, satu baris kosong, dan satu teks salah. Tentukan kebijakan untuk masing-masing sebelum menulis kode akhir. Beri pesan yang menyebut baris bermasalah agar data dapat diperbaiki.

Tentukan kebijakan data

Tidak semua berkas salah perlu diperlakukan sama. Baris kosong mungkin muncul karena pengguna menekan Enter tambahan; kamu dapat memilih melewatinya. Teks bukan angka mungkin menandakan data rusak dan perlu dicatat. Bilangan negatif mungkin sah untuk suhu, tetapi tidak sah untuk jumlah peserta. Semua keputusan itu berasal dari makna data, bukan dari fungsi int. Catat kebijakan dalam tiga kolom: bentuk masukan, tindakan, dan alasan. Baru sesudah itu tulis cabang programnya. Jika berkas besar, proses per baris membantu mengetahui tepat di mana konversi gagal. Nomor baris dapat diperoleh dengan enumerate saat menelusuri berkas.

Ringkasan dan latihan

Pembacaan berkas menghasilkan teks; konversi dapat gagal; with mengelola penutupan berkas. Buat berkas nilai.txt berisi 4, 6, dan 9 pada baris terpisah. Cetak jumlahnya. Kemudian tambahkan baris “tidak ada”, ubah program agar melewati baris itu sambil mencatatnya, dan jelaskan mengapa jumlah akhirnya tetap 19.

python · 8 baris
baris = ["12", " 8 ", "apel", "5"]
total = 0
for teks in baris:
    try:
        total += int(teks.strip())
    except ValueError:
        print("Lewati:", teks)
print("Total:", total)
Konversi aman untuk daftar baris angka

Sumber belajar

Penjelasan dan contoh disusun ulang untuk materi ini; sumber dapat dibuka untuk belajar lebih lanjut.

Cek pemahaman: Membaca Berkas dan Menangani Masukan Salah

Lembar kerja · jawab langsung di halaman ini

Soal
3

Memuat soal…