Kode pengguna dapat memunculkan pengecualian bawaan. Python mendefinisikan coba/kecuali untuk menangani pengecualian dan melanjutkan eksekusi program lebih lanjut tanpa gangguan
Mari kita segera ke contoh klausa coba/kecuali dasar
coba/kecuali pernyataan
Dengan asumsi file tidak tersedia, mengeksekusi kode di bawah ini akan memberikan output seperti yang ditunjukkan di bawah ini
try: f = open("testfile.txt") ... except FileNotFoundError as e: print(f" Error while reading file {e} ") Output: Error while reading file [Errno 2] No such file or directory: 'testfile.txt'Dalam kasus penggunaan praktis seperti menghubungkan ke db atau membuka objek file, kita mungkin perlu melakukan operasi teardown seperti penutupan db/penutupan file terlepas dari blok yang dijalankan. Jadi akhirnya adalah salah satu blok yang dapat dicadangkan untuk operasi ini karena selalu dijalankan. Mari kita lihat sebuah contoh
coba/kecuali/akhirnya pernyataan
try: f = open("testfile.txt") except FileNotFoundError as e: print(f" Error while reading file {e} ") finally: print(" Closing the file ") f.close() _Jadi apa yang mungkin salah di sini?
Yah, seseorang dapat dengan mudah menginjakkan kaki di mulut mereka ketika mereka menggunakan pernyataan kembali dengan coba/kecuali/akhirnya dengan Python. Mari berhati-hati mengambil langkah demi langkah untuk memahami penggunaan pernyataan pengembalian selama penanganan pengecualian
1. Penggunaan pengembalian dengan coba/kecuali
def test_func(): try: x = 10 return x except Exception as e: x = 20 return x finally: x = 30 return x print(test_func()) Output: 30Jika menurut Anda output dari kode di atas adalah 10, saya khawatir Anda salah. Cukup normal untuk membuat asumsi itu karena kita cenderung berpikir bahwa saat ada pernyataan pengembalian dalam suatu fungsi, maka ia kembali (keluar) dari fungsi tersebut. Yah, itu mungkin tidak benar dalam kasus ini
Dari dokumen,
Jika ada klausa akhirnya, klausa akhirnya akan dieksekusi sebagai tugas terakhir sebelum pernyataan try selesai. Klausa akhirnya berjalan apakah pernyataan try menghasilkan pengecualian atau tidak
Jika pernyataan try mencapai pernyataan istirahat, lanjutkan atau kembalikan, klausa akhirnya akan dieksekusi tepat sebelum eksekusi pernyataan istirahat, lanjutkan atau kembalikan
Jika klausa akhirnya menyertakan pernyataan pengembalian, nilai yang dikembalikan akan menjadi salah satu dari pernyataan pengembalian klausa akhirnya, bukan nilai dari pernyataan pengembalian klausa coba/kecuali
Jadi seperti yang Anda tebak dengan benar, output dari kode di atas adalah 30
Sekarang, apa yang terjadi jika pengecualian dimunculkan dalam kode yang disebutkan di atas
2. Penggunaan pengembalian dengan pengecualian
def test_func(): try: x = 10 raise Exception except Exception as e: print(f" Raising exception ") x = 20 return x finally: x = 30 return x print(test_func()) Output: Raising exception 30Jadi, sekali lagi nilai keluaran x akan menjadi 30. Kita harus ingat fakta bahwa pernyataan akhirnya akan dieksekusi SELALU
Untuk mendapatkan gambaran yang lebih jelas tentang alur eksekusi, mari tambahkan pernyataan cetak di setiap blok
def test_func(): try: x = 10 print(f" Inside try block ") return x except Exception as e: x = 20 print(f" Inside except block ") return x finally: x = 30 print(f" Inside finally block ") return x print(test_func()) Output: Inside try block Inside finally block 30 _Ini akan memberikan gambaran tentang aliran eksekusi. Sekarang setelah kita memiliki pemahaman yang baik tentang bagaimana coba/kecuali/akhirnya bekerja dengan pernyataan pengembalian, mari kita coba memasukkan klausa lain
Klausa lain dapat ditambahkan bersama dengan coba/kecuali dan klausa lain akan dieksekusi jika blok coba tidak memunculkan pengecualian
3. Penggunaan return dengan try/else/finally
def test_func(): try: x = 10 print(f" Inside try block ") return x except Exception as e: x = 20 print(f" Inside except block ") return x else: print(f" Inside else block ") x = 40 return x finally: x = 30 print(f" Inside finally block ") return x print(test_func()) Output: Inside try block Inside finally block 30Jadi, mengapa klausa else tidak dieksekusi di sini meskipun blok try tidak memunculkan pengecualian apa pun. Perhatikan pernyataan return di blok try. Blok else tidak pernah dieksekusi karena fungsi dikembalikan bahkan sebelum eksekusi mencapai klausa else
Sekarang hapus pernyataan return di blok try dan jalankan kembali kode di atas
def test_func(): try: x = 10 print(f" Inside try block ") except Exception as e: x = 20 print(f" Inside except block ") return x else: print(f" Inside else block ") x = 40 return x finally: x = 30 print(f" Inside finally block ") return x print(test_func()) Output: Inside try block Inside else block Inside finally block 30 _Ringkasan
Berhati-hatilah saat menambahkan kembali dalam klausa coba/kecuali/akhirnya
Klausa akhirnya berjalan apakah pernyataan try menghasilkan pengecualian atau tidak
Jika klausa akhirnya menyertakan pernyataan pengembalian, nilai yang dikembalikan akan menjadi salah satu dari pernyataan pengembalian klausa akhirnya
Klausa lain akan dieksekusi jika blok percobaan tidak memunculkan pengecualian
Referensi
https. //dokumen. python. org/3/tutorial/kesalahan. html
https. //stackoverflow. com/questions/11164144/aneh-coba-kecuali-lain-akhirnya-perilaku-dengan-return-pernyataan
Bagaimana Anda mengembalikan pengecualian dengan Python?
Sebagai pengembang Python, Anda dapat memilih untuk melontarkan pengecualian jika suatu kondisi terjadi. Untuk membuang (atau menaikkan) pengecualian, gunakan kata kunci kenaikan .Bagaimana cara mengembalikan pengecualian?
Instruksi Kembali Dari Pengecualian dapat dikeluarkan hanya dari pemanggilan awal urutan penanganan pengecualian eksternal atau dari pemanggilan yang memiliki penangan pengecualian internal yang aktifBisakah kita kembali kecuali dengan Python?
Perilaku pengembalian dengan coba/kecuali dengan Python . Python mendefinisikan coba/kecuali untuk menangani pengecualian dan melanjutkan eksekusi program lebih lanjut tanpa gangguan. User code can raise built-in exceptions. Python defines try/except to handle exceptions and proceed with the further execution of program without interruption.Apa fungsi untuk memunculkan pengecualian?
Fungsi RaiseException memungkinkan proses menggunakan penanganan pengecualian terstruktur untuk menangani pengecualian pribadi, yang dihasilkan perangkat lunak, dan ditentukan aplikasi.