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
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 dalamtry.
Menangkap pesan pengecualian
Gunakan as untuk mengikat objek pengecualian ke sebuah nama:
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
try:
valore = dati[chiave]
except (KeyError, IndexError):
valore = NoneTuple tipe menangkap pengecualian apa pun dari tipe (atau subkelas) tersebut.
Struktur lengkapnya: coba / kecuali / yang lain / akhirnya
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 exceptionelse— gunakan untuk kode yang bergantung pada keberhasilantry. 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:
def diviso(a, b):
if b == 0:
raise ValueError("the divisor cannot be zero")
return a / bPengecualian bawaan paling umum yang akan Anda temui dan ajukan:
ValueError— nilai memiliki tipe yang benar tetapi tidak dapat diterima (misalnya penguraian).TypeError— jenisnya salah (misalnyalen(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 bloktryselesai 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
Tulis ekspresi yang mencoba int('abc'): jika ValueError dimunculkan, tetapkan string 'errore' ke `result`; jika tidak, tetapkan nomornya. Evaluasi `hasil`.
Tunjukkan petunjuk
int('abc') memunculkan ValueError.
Solusi tersedia setelah 3 upaya
Tinjau latihan
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.
Tunjukkan petunjuk
naikkan ValueError('...') di dalam fungsi; tangkap dengan kecuali ValueError sebagai e.
Solusi tersedia setelah 3 upaya
Tantangan tambahan
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\`.
Tunjukkan petunjuk
Gunakan coba: hasil = int(teks_val) diikuti dengan kecuali ValueError: hasil = Tidak Ada.
Solusi tersedia setelah 3 upaya