Python menaikkan pengecualian di blok coba

Penanganan kesalahan adalah aspek penting dari pengkodean. Ketika kesalahan diperlakukan dengan benar, program beroperasi dengan lancar dan tidak menyebabkan crash yang mengganggu bagi pengguna akhir. Dalam Python, penanganan kesalahan terjadi dengan konstruksi kode coba-kecuali. (Jika Anda berasal dari bahasa pemrograman lain, tidak ada pernyataan try-catch di Python. )

Kode coba-kecuali berfungsi sedemikian rupa sehingga mencoba menjalankan ekspresi atau sepotong kode. Jika proses gagal, Python melanjutkan untuk menjalankan tindakan di blok kecuali. Jika proses berhasil, tidak ada tindakan lebih lanjut yang diambil

Sebagai contoh cepat, mari kita coba mencetak nilai yang tidak ditentukan dan menampilkan kesalahan jika gagal

try:
  print(x)
except:
  print("Exception thrown. x does not exist.")

Keluaran

Exception thrown. x does not exist.
_
  • Di sini program mencoba menjalankan kode di dalam blok try
  • Jika (dan ketika) gagal, kecuali blok menangkap pengecualian dan mencatatnya ke dalam konsol

Ini adalah panduan definitif untuk menangani kesalahan dalam Python. Anda akan mempelajari cara menggunakan struktur try…except untuk menangani pengecualian dalam kode Anda. Selain itu, Anda belajar cara menangani banyak pengecualian dan cara menambahkan blok finally dan else dalam kode penanganan kesalahan untuk selalu menjalankan tindakan. Semua teori didukung dengan contoh-contoh yang bagus dan ilustratif

Mari lompat ke dalamnya

Apa itu Penanganan Error dalam Coding?

Setiap kali Anda menulis kode perangkat lunak, selalu ada kemungkinan terjadi kesalahan

Misalnya, jika Anda mengharapkan pengguna untuk memasukkan angka tetapi mereka malah memasukkan teks, program dapat macet jika Anda tidak mempersiapkan input yang salah tersebut.

Penanganan error adalah bagian penting dari penulisan kode yang mempertahankan aliran normal program Anda tanpa crash dan gangguan lainnya

Jika Anda pernah menggunakan aplikasi seluler, dan tiba-tiba aplikasi ditutup tanpa peringatan, ada kesalahan yang tidak tertangani di balik layar. Bisa jadi kode perangkat lunak mencoba membaca nilai yang tidak ada. Meskipun demikian, ini sangat mengganggu pengguna akhir aplikasi Anda, bukan?

Saat menulis kode perangkat lunak, Anda harus selalu mengingat kesalahan apa yang mungkin terjadi untuk menghindari program yang menyebabkan gangguan yang mengganggu

Sebagai contoh, jika fungsi Python beroperasi dengan asumsi bahwa nilai input selalu bilangan bulat, itu bisa menyebabkan crash jika inputnya berupa string. Untuk menghindari crash seperti ini, Anda perlu menulis kode sedemikian rupa sehingga ia tahu apa yang harus dilakukan jika seseorang secara tidak sengaja memasukkan string, bukan integer.

Di sinilah penanganan kesalahan membantu. Di Python, Anda dapat melakukan penanganan error dengan struktur kode coba-kecuali yang sederhana. Idenya adalah mencoba menjalankan sepotong kode. Jika uji coba gagal, maka kecuali blok menangani kesalahan alih-alih membiarkan program macet

Pola Coba-Kecuali dalam Penanganan Kesalahan Python

Di Python, Anda bisa menggunakan pernyataan coba-kecuali untuk menangani kesalahan dan pengecualian yang mungkin terjadi saat Anda menjalankan kode

Kesalahan yang terjadi selama eksekusi program disebut pengecualian. Di Python, ekspresi yang salah meningkatkan kesalahan dan pengecualian yang akan merusak program Anda jika Anda tidak menangani pengecualian dengan benar

Misalnya, contoh klasik pengecualian adalah saat Anda mencoba mengakses nilai yang tidak ditentukan atau membagi angka dengan 0

Crash yang tiba-tiba tidak menguntungkan bagi Anda sebagai pengembang, apalagi bagi pengguna akhir aplikasi Anda

Di sinilah mekanisme penanganan kesalahan bawaan membantu. Alih-alih membiarkan program Anda macet, Anda menangani kesalahan selama runtime dan eksekusi program berlanjut

Pola penanganan kesalahan di Python terdiri dari berikut ini

  • Blok coba . Ini menjalankan sepotong kode. Jika potongan kode ini gagal, pengecualian akan dimunculkan
  • Blok kecuali . Blok ini menangkap kemungkinan kesalahan yang ditimbulkan oleh blok try. Juga, Anda dapat (dan harus) menentukan jenis kesalahan yang Anda harapkan dari blok percobaan di sini
  • Blok akhirnya opsional menjalankan sepotong kode terlepas dari apakah ada kesalahan atau tidak. Ini adalah blok kode opsional yang tidak Anda perlukan dalam skema penanganan kesalahan

Inilah percobaan umum kecuali struktur kode

try:
    <actions>
except Exception:
    <handle the exception here>

Kode ini cukup intuitif untuk dibaca. Percobaan menentukan blok kode yang coba dijalankan oleh Python. Jika proses gagal, kecuali blok menangkap pengecualian dan menjalankan beberapa kode

Contoh

Sebagai contoh, mari jalankan kode coba-kecuali untuk memastikan kode tidak macet jika variabel x tidak ditentukan

try:
  print(x)
except:
  print("Exception thrown. x does not exist.")

Perhatikan bahwa meskipun potongan kode ini mencegahnya mogok, cara penulisannya saat ini adalah praktik yang buruk. Ini karena kami tidak menentukan jenis kesalahan yang kami harapkan di blok kecuali

Tentukan Jenis Kesalahan

Untuk memperbaiki contoh sebelumnya, Anda perlu tahu bahwa ketika Anda mengakses variabel yang tidak terdefinisi dengan Python, Anda harus mengharapkannya menyebabkan NameError

Sekarang Anda dapat mengharapkan NameError potensial di kecuali blok

try:
  print(x)
except NameError:
  print("NameError: x is not defined.")
_

Keluaran

NameError: x is not defined.

Ini tidak hanya membuat kode lebih mudah dibaca tetapi juga memastikan Anda tahu apa yang Anda lakukan. Jauh lebih baik untuk menentukan jenis (atau jenis) kesalahan yang mungkin Anda hadapi daripada hanya menangkap kesalahan umum

Sekarang, bagaimana jika ada lebih dari satu pengecualian yang mungkin terjadi? . Python memungkinkan Anda menentukan blok kecuali sebanyak yang diperlukan

Beberapa Pengecualian dalam Penanganan Kesalahan Python

Di Python, Anda dapat memiliki banyak blok kecuali untuk menangani berbagai jenis kesalahan secara terpisah

try:
    <do something>
except Exception1:
    <handle the this error type>
except Exception2:
    <handle the this error type>
except Exception3:
    <handle the this error type>
_

Ini paling baik ditunjukkan dengan sebuah contoh

Contoh

Mari buat skrip yang membagi dua angka satu sama lain. Dalam hal membagi angka, ada dua hal yang bisa salah

  1. Satu atau kedua angka tidak ditentukan
  2. Penyebutnya nol

Masalah pertama akan memunculkan NameError. Masalah kedua menyebabkan ZeroDivisionError

Untuk mencegah error yang disebabkan oleh dua potensi masalah ini, Anda perlu menangani kedua jenis error dalam kode Anda. Untuk melakukan ini, mari tentukan beberapa logika penanganan kesalahan coba-kecuali dalam kode

Dalam struktur coba-kecuali, Anda ingin menangani kedua pengecualian secara terpisah. Jadi, Anda memerlukan dua kecuali blok untuk kasus yang berbeda

try:
    result = x / y
except ZeroDivisionError:
    print("Make sure no divisions by 0 are made.")
except NameError:
    print("Make sure both numbers are defined.")

Omong-omong, silakan salin-tempel kode di atas ke editor kode Anda dan jalankan kode untuk melihat apa yang terjadi

Sekarang, karena x dan y tidak ditentukan, program tidak akan macet berkat penanganan kesalahan yang Anda lakukan. Sebagai gantinya, program akan mencetak pesan yang Anda tentukan yang akan ditampilkan jika terjadi NameError

Make sure both numbers are defined
_

Sekarang, mari kita definisikan x dan y, tapi mari kita jadikan y nol

x = 10
y = 0

try:
    result = x / y
except ZeroDivisionError:
    print("Make sure no divisions by 0 are made.")
except NameError:
    print("Make sure both numbers are defined.")
_

Karena membagi dengan 0 secara matematis tidak mungkin, ini menyebabkan kesalahan. Namun berkat penanganan kesalahan Anda yang hati-hati, kesalahan ini tidak merusak program. Sebaliknya, itu menunjukkan ada kesalahan membagi dengan 0

Exception thrown. x does not exist.
_0

Terakhir, mari kita menulis kode sedemikian rupa sehingga tidak ada lagi kesalahan

Exception thrown. x does not exist.
_1

Sekarang tidak ada pesan kesalahan. Ini berarti program berjalan dengan sukses karena x dan y keduanya terdefinisi dan y bukan 0

Akhirnya Blokir dalam Penanganan Kesalahan Python

Dengan Python, Anda dapat menambahkan blok finally dalam kode penanganan error try-exception. Blok terakhir adalah blok opsional yang berjalan terlepas dari apakah ada kesalahan atau tidak

Misalnya, mari kita jalankan fungsi yang menangani kesalahan tanpa blok akhirnya

Exception thrown. x does not exist.
_2

Keluaran

Exception thrown. x does not exist.
_3

Perhatikan bahwa fungsi tidak pernah mencetak "Yay" karena kembali sebelumnya

Untuk mencetak bagian "Yay" dari kode, Anda perlu menambahkan blok terakhir dalam struktur penanganan kesalahan. Blok akhirnya akan berjalan apa pun yang terjadi. Bahkan jika fungsi mengembalikan nilai, blok akhirnya akan berjalan dan menyelesaikan apa yang harus dilakukan dalam kode penanganan kesalahan

Exception thrown. x does not exist.
_4

Keluaran

Exception thrown. x does not exist.
_5

Lain Blok dalam Penanganan Kesalahan Python

Anda juga dapat menambahkan blok lain opsional setelah kecuali blok di Python. Gagasan dari blok else adalah menjalankan kode jika tidak ada kesalahan dalam urutan penanganan kesalahan

Misalnya, mari kita membagi dua angka satu sama lain, menangkap potensi kesalahan, dan mencetak pesan sukses jika tidak ada kesalahan yang terjadi

Exception thrown. x does not exist.
_6

Kesimpulan

Di Python, tidak ada pernyataan try-catch. Sebaliknya, Python memiliki versinya sendiri yang disebut coba-kecuali. Struktur kode coba-kecuali digunakan untuk menangani kesalahan dan pengecualian

Bisakah Anda mengajukan pengecualian di blok percobaan?

Tempatkan pernyataan kode apa pun yang mungkin memunculkan atau melontarkan pengecualian di blok try , dan tempatkan pernyataan yang digunakan untuk menangani pengecualian atau pengecualian di satu atau beberapa blok catch di bawah blok try. Setiap blok tangkapan mencakup jenis pengecualian dan dapat berisi pernyataan tambahan yang diperlukan untuk menangani jenis pengecualian tersebut.

Bisakah kita menggunakan kata kunci kenaikan di blok TRY?

Sementara blok coba dan kecuali adalah untuk menangani pengecualian, sebaliknya kata kunci kenaikan adalah untuk memunculkan pengecualian .

Bagaimana Anda melempar kesalahan di blok percobaan?

Lempar, dan Coba. Menangkap. Akhirnya . Pernyataan catch mendefinisikan blok kode untuk menangani kesalahan apa pun. Pernyataan akhirnya mendefinisikan blok kode untuk dijalankan terlepas dari hasilnya. Pernyataan throw mendefinisikan kesalahan khusus .

Bagaimana cara menaikkan pengecualian secara manual?

menaikkan Pengecualian("Saya tahu Python. ") Ganti Pengecualian dengan jenis pengecualian tertentu yang ingin Anda lempar. .
Tingkatkan pengecualian vs. meningkatkan pengecualian (args).
Kenaikan pernyataan. Pernyataan kenaikan tanpa argumen memunculkan kembali pengecualian terakhir. .
Naikkan pengecualian (args) dari original_exception