Python menaikkan pengecualian di luar coba

Saat kita mempelajari pengkodean dengan Python, kita pasti membuat berbagai kesalahan, seringkali secara sintaksis dan terkadang semantik. Misalnya, saya tidak tahu berapa kali saya lupa titik dua setelah pernyataan if atau deklarasi fungsi, yang menghasilkanSyntaxError berikut

Kesalahan sintaks

Kesalahan sintaks ini, juga dikenal sebagai kesalahan penguraian, biasanya ditunjukkan dengan panah kecil ke atas di Python, seperti yang ditunjukkan pada cuplikan kode di atas. Selain kesalahan pengupasan, kode kami dapat berisi kesalahan lain yang merupakan masalah yang lebih logis. Misalnya, TypeError adalah pesan kesalahan lain yang sering kita jumpai

Contoh Pengecualian

Dalam cuplikan kode di atas, kami mencoba menggabungkan string. Namun, angka 2020 adalah tipe int, yang tidak dapat digunakan dalam rangkaian string yang hanya berfungsi dengan objek str. Dalam hal ini, kita akan menemukan TypeError. Menggunakan jargon yang lebih tepat, pengecualian TypeError dimunculkan atau Python memunculkan pengecualian TypeError

Seperti TypeError, jenis kesalahan ini (mis. g. ,ValueError dan SyntaxError0) terjadi ketika Python mencoba mengeksekusi baris kode ini. Di Python, kami biasanya menyebut kesalahan non-sintaks ini sebagai pengecualian, membuatnya berbeda dari kesalahan sintaksis. Untuk kesalahan sintaksis, kami harus memperbarui baris kode yang terpengaruh dengan menggunakan sintaks yang dapat diterima. Untuk pengecualian, kami dapat menanganinya dengan baik dengan penerapan teknik relevan yang tepat

Pertama mari kita lihat bagaimana kita bisa menangani pengecualian. Di babak kedua, kita akan belajar tentang exception-raising di Python

Penanganan Pengecualian

1. Bentuk dasar penanganan pengecualian

Cara standar untuk menangani pengecualian adalah dengan menggunakan blok SyntaxError1. Ini seperti blok SyntaxError_2 di banyak bahasa pemrograman lain, jika Anda memiliki latar belakang seperti itu

Klausa SyntaxError3 menyertakan kode yang berpotensi menimbulkan pengecualian. Jika semuanya bekerja dengan baik dalam klausa SyntaxError_3, tidak ada kode dalam klausa SyntaxError5 yang akan dieksekusi. Blok SyntaxError1 selesai dan program akan dilanjutkan

Namun, jika pengecualian muncul di klausa SyntaxError3, Python akan berhenti mengeksekusi kode lainnya di klausa itu, dan meneruskan pengecualian ke klausa SyntaxError5 untuk melihat apakah kesalahan khusus ini ditangani di sana

Mari kita lihat contoh sederhana dari bentuk paling dasar penanganan pengecualian

Bentuk Dasar Penanganan Perkecualian

Seperti yang Anda lihat, ketika pembagian berfungsi seperti yang diharapkan, hasil pembagian ini (mis. e. , 2. 0) dicetak. Namun, saat kami mencoba membagi angka dengan nol, Python memunculkan SyntaxError0. Untungnya, fungsi kami ditulis untuk menangani kesalahan ini, dan pesan “Anda tidak dapat membagi 12 dengan nol. ” dicetak untuk memberi tahu pengguna tentang kesalahan ini

2. Mengapa menangani pengecualian?

Kami sekarang memahami cara menangani pengecualian menggunakan blok SyntaxError1. Tapi mengapa kita repot-repot menangani pengecualian? . Mari kita lihat beberapa fungsi serupa, dengan dan tanpa menangani pengecualian

Pengecualian Ditangani vs. Tidak ditangani

Seperti yang ditunjukkan di atas, ketika kita memanggil fungsi yang menangani pengecualian, kita melihat bahwa program dijalankan hingga akhir fungsi (Baris 15–17). Sebaliknya, ketika kita memanggil fungsi yang tidak menangani pengecualian, kita melihat bahwa program tidak dapat menyelesaikan sampai akhir fungsi (Baris 18-22)

3. Penugasan variabel

Kami dapat menetapkan pengecualian ke variabel sehingga kami dapat mengambil lebih banyak informasi tentang pengecualian. Dalam kode di bawah ini, kita dapat menetapkan pengecualian yang ditangani TypeError ke variabel TypeError2, sehingga kita dapat meminta Python untuk mencetak pesan kesalahan untuk kita. Seperti yang ditunjukkan pada Baris 10, pesan kesalahan dicetak memberi tahu kita bahwa kita tidak dapat menggabungkan string dengan bilangan bulat

Penugasan Pengecualian Variabel

4. Beberapa pengecualian

Kami dapat menangani banyak pengecualian dalam klausa SyntaxError5. Kami hanya akan membungkus kemungkinan pengecualian dalam sebuah tuple, seperti yang ditunjukkan pada Baris 6 dalam cuplikan kode berikut. Saat kami memanggil fungsi, kami sengaja membuat dua kesalahan berbeda dengan menaikkan masing-masing ValueError dan SyntaxError0. Pesan tersebut dengan jelas memberi tahu kami pengecualian apa yang ditangani

Beberapa Pengecualian

5. Beberapa kecuali klausa

Terkait dengan bagian sebelumnya, ketika kita mengharapkan pengecualian yang berbeda, kita sebenarnya dapat memiliki beberapa klausa SyntaxError5 dengan masing-masing menangani beberapa pengecualian khusus. Mari kita ubah fungsi di atas (i. e. , TypeError7) untuk membuat beberapa kecuali klausa, seperti yang ditunjukkan di bawah ini

Beberapa Klausa Kecuali

Setelah modifikasi, saat kita memanggil fungsi dua kali dengan maksud masing-masing memunculkan dua pengecualian berbeda, pesan yang diharapkan dicetak untuk setiap klausa SyntaxError5

6. Klausa lain

Kita dapat menggunakan klausa TypeError_9 di blok SyntaxError1. Perlu dicatat bahwa klausa TypeError_9 perlu muncul setelah klausa SyntaxError5. Kode dalam klausa TypeError_9 berjalan ketika klausa SyntaxError3 selesai tanpa pengecualian apa pun. Mari kita lihat penggunaannya

Penanganan Pengecualian Dengan Klausa Else

Kode memiliki fungsi yang menggunakan klausa TypeError_9 di blok SyntaxError1. Seperti yang Anda lihat, kode dalam klausa TypeError_9 hanya berjalan ketika klausa SyntaxError3 selesai dan tidak ada pengecualian yang dimunculkan. Di sisi lain, kode tidak berjalan saat pengecualian dimunculkan dan ditangani

7. Klausa akhirnya

Selain penggunaan klausa TypeError_9, kita juga bisa menggunakan klausa str0 di blok SyntaxError1. Harap perhatikan bahwa klausa str_0 perlu ditempatkan di akhir blok, di bawah klausa SyntaxError5 atau klausa TypeError9 (jika disetel). Kode dalam klausa str0 akan berjalan tepat sebelum seluruh blok SyntaxError1 selesai (setelah mengeksekusi kode dalam klausa SyntaxError3 atau SyntaxError5). Yang penting, kode dalam klausa str_0 akan berjalan terlepas dari status peningkatan dan penanganan pengecualian. Mari kita lihat cara kerjanya

Penanganan Pengecualian Dengan Klausa Akhirnya

Seperti yang ditunjukkan pada cuplikan kode di atas, kami memiliki fungsi yang memiliki klausa str0. Kami memanggil fungsi dua kali dengan panggilan kedua memunculkan pengecualian. Dalam kedua kasus, kode dalam klausa str_0 berjalan dengan sukses

Hal penting lain yang perlu diperhatikan dengan penggunaan klausa str0 adalah bahwa jika klausa try menyertakan pernyataan TypeError3, TypeError4, dan TypeError5, klausa str0 akan berjalan terlebih dahulu sebelum mengeksekusi pernyataan TypeError3, TypeError4, atau TypeError_5. Banyak orang bisa membuat kesalahan di sini. Mari kita lihat contoh sepele di bawah ini

Urutan Eksekusi (akhirnya)

Naikkan Pengecualian

8. Bentuk dasar memunculkan pengecualian

Di bagian terakhir, kita mempelajari berbagai fitur menggunakan blok SyntaxError1 untuk menangani pengecualian di Python, yang tentunya diperlukan untuk kode yang lebih kuat. Namun, kode Anda dapat diperkuat lebih lanjut jika Anda tahu cara memunculkan pengecualian dengan benar. Pertama mari kita lihat bentuk dasarnya

Meningkatkan Pengecualian. Bentuk dasar

Seperti yang ditunjukkan di atas, kami menggunakan kata kunci TypeError1 (dalam bahasa pemrograman lain, ini disebut TypeError2), diikuti oleh kelas pengecualian (e. g. , TypeError3, TypeError4). Kita juga dapat menggunakan konstruktor kelas pengecualian untuk membuat instance, seperti TypeError5. Kedua penggunaan ini tidak memiliki perbedaan, dan yang pertama hanyalah gula sintaks untuk yang terakhir menggunakan konstruktor

9. Pengecualian dengan pesan khusus

Kami juga dapat memberikan informasi tambahan tentang pengecualian yang kami ajukan. Cara termudah untuk melakukannya adalah dengan menggunakan konstruktor kelas pengecualian dan menyertakan pesan kesalahan yang berlaku untuk membuat instance. Ini cukup mudah

Pesan Kustom

10. Naikkan kembali dan gelembungkan

Seperti yang ditunjukkan, semua pengecualian ditangani setiap kali mereka tertangkap. Namun, mungkin saja kami dapat menaikkan kembali pengecualian dan meneruskan pengecualian ke lingkup luar untuk melihat apakah dapat ditangani. Melewati pengecualian ke luar juga dikenal sebagai bubbling up atau propagasi

Fitur ini lebih berguna saat kita menulis kode rumit yang melibatkan struktur bersarang (mis. g. , fungsi memanggil fungsi lain, yang mungkin memanggil fungsi lain). Dengan pengecualian yang dibangkitkan kembali, kami dapat memutuskan di mana harus menangani pengecualian tertentu. Tentu saja, lokasi yang tepat untuk menangani pengecualian tertentu ditentukan berdasarkan kasus per kasus. Di sini, saya dapat menunjukkan kepada Anda bagaimana kami dapat mengajukan kembali pengecualian. Mari kita lihat beberapa kode terlebih dahulu

Naikkan kembali Pengecualian

Pada kode di atas, kita memiliki dua fungsi, dengan TypeError6 memanggil fungsi lainnya TypeError7. Kami memanggil fungsi dengan string dua kali, keduanya menghasilkan pengecualian, sehingga pesan "Gagal melakukan transmisi" dicetak karena pengecualian ditangani dalam fungsi TypeError7. Namun, untuk kedua kalinya, kami memanggil fungsi tersebut, kami meminta fungsi TypeError7 untuk menaikkan kembali pengecualian (Baris 8–9) sehingga klausa SyntaxError5 berjalan di fungsi TypeError6 (Baris 15 & 22–23)

11. Pengecualian yang ditentukan pengguna

Dalam banyak kasus, kami dapat menggunakan untuk membantu kami meningkatkan dan menangani pengecualian dalam proyek kami. Namun, Python memberi kita fleksibilitas untuk membuat kelas pengecualian khusus kita sendiri. Jika Anda tidak tahu cara membuat kelas khusus Python, lihat artikel saya sebelumnya tentang ini

Deklarasikan Kelas Python Pertama Anda — Pahami 3 Komponen Dasar

Atur kode Anda dengan lebih baik menggunakan kelas khusus

medium. com

Secara khusus, kita perlu mendeklarasikan kelas sebagai subkelas dari kelas TypeError3 bawaan. Secara konvensional, Anda harus memberi nama kelas Anda sebagai sesuatu yang diakhiri dengan Error (mis. g. , TypeError_3)

Kelas Pengecualian Khusus

Seperti yang ditunjukkan di atas, kami membuat kelas pengecualian khusus yang disebut TypeError4. Saat kami mengajukan pengecualian seperti itu, menggunakan nama kelas saja tidak akan berfungsi, seperti yang ditunjukkan pada Baris 10–13. Sebagai gantinya, kita harus memberi contoh pengecualian ini dengan menyetel dua argumen posisional untuk metode konstruktor. Seperti yang ditunjukkan pada Baris 17, kita dapat melihat pesan pengecualian khusus, dengan menerapkan metode TypeError5. Dengan kata lain, pesan pengecualian dihasilkan dengan memanggil fungsi TypeError6

12. Kapan Menaikkan

Kami telah mempelajari cara meningkatkan pengecualian bawaan dan khusus. Saat kita mempelajari Python, seringkali, kita hanya perlu mengetahui cara menangani pengecualian. Namun, dengan kemajuan keterampilan Python Anda, Anda mungkin bertanya-tanya kapan Anda harus mengajukan pengecualian

Aturan praktisnya adalah Anda harus memunculkan pengecualian saat kode Anda mungkin mengalami beberapa skenario saat eksekusi tidak dapat dilanjutkan. Dengan memunculkan pengecualian yang tepat, itu akan memungkinkan bagian lain dari kode Anda untuk menangani pengecualian dengan benar, sehingga eksekusi dapat dilanjutkan

Kapan Menaikkan Pengecualian

Pada kode di atas, pertama-tama kita mendefinisikan sebuah fungsi, TypeError7, yang dapat membaca file. Misalkan fungsi lain TypeError_8 adalah API publik dan kami tidak memiliki kontrol yang baik atas jenis file apa yang akan diteruskan pengguna. Oleh karena itu, ketika kami membaca data menggunakan fungsi TypeError7, kami ingin memunculkan pengecualian, karena program kami tidak dapat berjalan tanpa data yang benar

Kami memanggil fungsi TypeError_8 API publik dua kali, dengan satu menggunakan tipe data yang salah dan yang lainnya menggunakan tipe data yang benar. Untuk kondisi sebelumnya, pengecualian dinaikkan dan ditangani dengan benar sehingga program kami tidak macet dan pengguna juga diberitahu tentang kesalahan tentang penggunaan API

Kesimpulan

Pada artikel ini, kami meninjau berbagai aspek terkait penanganan dan peningkatan pengecualian di Python. Dengan mengambil pengecualian ke proyek Anda, kode Anda akan menjadi lebih kuat dan Anda akan cenderung mengalami skenario di mana eksekusi tidak dapat dipulihkan

Bisakah Anda menggunakan pernyataan kenaikan gaji di luar kecuali blok?

Jika Anda bertanya apakah Anda dapat menaikkan kembali pengecualian yang sama di luar kecuali blok, maka saya rasa tidak kecuali Anda menetapkannya ke variabel atau sesuatu

Bagaimana Anda memunculkan pengecualian secara manual di Python?

Sebagai pengembang Python, Anda dapat memilih untuk melontarkan pengecualian jika suatu kondisi terjadi. Untuk membuang (atau menaikkan) pengecualian, gunakan kata kunci kenaikan .

Bagaimana Anda meningkatkan pengecualian saat ini di Python?

Menangkap Pengecualian Python dengan Coba-Kecuali-Else-Akhirnya . Jika ada pengecualian, kode di blok "kecuali" yang sesuai akan dijalankan, lalu kode di blok "akhirnya" akan dijalankan.

Apa perbedaan antara menaikkan dan mencoba dengan Python?

kenaikan gaji memungkinkan Anda untuk melempar pengecualian kapan saja. menegaskan memungkinkan Anda untuk memverifikasi jika kondisi tertentu terpenuhi dan mengeluarkan pengecualian jika tidak. Dalam klausa try, semua pernyataan dieksekusi hingga pengecualian ditemukan. kecuali digunakan untuk menangkap dan menangani pengecualian yang ditemui dalam klausa try