Lompati ke konten utama
Modul 2 · Pelajaran 4 dari 48/36 dalam kursus~12 min
Pelajaran modul (4/4)

Penanganan kesalahan: coba/kecuali

Ketika terjadi kesalahan saat runtime (pembagian dengan nol, kunci hilang, dan operasi pada tipe yang tidak kompatibel) Python memunculkan pengecualian. Tanpa penanganannya, pengecualian akan mengganggu program. Dengan try / except Anda dapat menangkapnya dan memutuskan apa yang harus dilakukan.

Bentuk dasar

Python
try:
    risultato = 10 / 0
except ZeroDivisionError:
    risultato = None
risultato  # None
  • blok try: berisi kode yang mungkin gagal;
  • except <ErrorType>: dijalankan hanya jika jenis kesalahan tersebut muncul di dalam try.

Menangkap pesan pengecualian

Gunakan as untuk mengikat objek pengecualian ke sebuah nama:

Python
try:
    int("non è un numero")
except ValueError as e:
    messaggio = str(e)
messaggio  # "invalid literal for int() with base 10: 'non è un numero'"

Beberapa jenis bersama-sama

Python
try:
    valore = dati[chiave]
except (KeyError, IndexError):
    valore = None

Tuple tipe menangkap pengecualian apa pun dari tipe (atau subkelas) tersebut.

Struktur lengkapnya: coba / kecuali / yang lain / akhirnya

Python
try:
    n = int("42")
except ValueError:
    print("not a number")
else:
    print(f"parsed: {n}")     # executed only if NO exception occurred
finally:
    print("always executed")  # executed regardless, even on exception
  • else — gunakan untuk kode yang bergantung pada keberhasilan try. Simpan itu terpisah sehingga Anda tidak secara tidak sengaja menangkap pengecualian yang tidak terkait.
  • finally — pembersihan yang harus selalu dilakukan (menutup file, melepaskan sumber daya). Dieksekusi baik saat berhasil maupun saat error.

Memunculkan pengecualian: raise

Terkadang Andalah yang ingin memberi sinyal bahwa ada yang tidak beres:

Python
def diviso(a, b):
    if b == 0:
        raise ValueError("the divisor cannot be zero")
    return a / b

Pengecualian bawaan paling umum yang akan Anda temui dan ajukan:

  • ValueError — nilai memiliki tipe yang benar tetapi tidak dapat diterima (misalnya penguraian).
  • TypeError — jenisnya salah (misalnya len(42)).
  • KeyError / IndexError — kunci/indeks hilang.
  • ZeroDivisionError — pembagian dengan nol.
  • FileNotFoundError, PermissionError — operasi sistem file.

Klausa else danfinal di blok try

Blok try dapat mendefinisikan dua klausa tambahan:

  • else: dieksekusi hanya jika blok try selesai tanpa memunculkan pengecualian apa pun.
  • finally: selalu dieksekusi, terlepas dari apakah terjadi pengecualian. Ini ideal untuk membersihkan sumber daya (misalnya menutup file terbuka atau koneksi database).

Cobalah sendiri

Latihan#python.m2.l4.e1
Upaya: 0Memuat…

Tulis ekspresi yang mencoba int('abc'): jika ValueError dimunculkan, tetapkan string 'errore' ke `result`; jika tidak, tetapkan nomornya. Evaluasi `hasil`.

Memuat editor…
Tunjukkan petunjuk

int('abc') memunculkan ValueError.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#python.m2.l4.e2
Upaya: 0Memuat…

Tentukan `divide(a, b)` yang mengembalikan a/b tetapi memunculkan ValueError dengan pesan 'divisore zero' jika b adalah 0. Kemudian panggil divide(10, 0) di dalam percobaan/kecuali dan tetapkan ke `pesan` string pengecualian yang ditangkap.

Memuat editor…
Tunjukkan petunjuk

naikkan ValueError('...') di dalam fungsi; tangkap dengan kecuali ValueError sebagai e.

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#python.m2.l4.e3
Upaya: 0Memuat…

Tulis blok \`coba-kecuali\` untuk mengonversi string \`text_val = "abc"\` menjadi bilangan bulat. Jika konversi memunculkan \`ValueError\`, tetapkan \`Tidak Ada\` ke \`hasil\`. Jika tidak, tetapkan nomor yang dikonversi. Terakhir, evaluasi \`hasil\`.

Memuat editor…
Tunjukkan petunjuk

Gunakan coba: hasil = int(teks_val) diikuti dengan kecuali ValueError: hasil = Tidak Ada.

Solusi tersedia setelah 3 upaya