Penanganan Pengecualian Python Menggunakan pernyataan try, kecuali dan akhirnya

Dalam tutorial ini, Anda akan belajar bagaimana menangani pengecualian dalam program Python Anda menggunakan pernyataan try, kecuali dan akhirnya dengan bantuan contoh.

Video: Penanganan Pengecualian Python (coba… kecuali… akhirnya)

Pengecualian di Python

Python memiliki banyak pengecualian bawaan yang dimunculkan ketika program Anda mengalami kesalahan (ada yang tidak beres dalam program).

Ketika pengecualian ini terjadi, penerjemah Python menghentikan proses saat ini dan meneruskannya ke proses pemanggilan hingga ditangani. Jika tidak tertangani, program akan crash.

Sebagai contoh, mari kita pertimbangkan sebuah program di mana kita memiliki fungsi Ayang memanggil fungsi B, yang pada gilirannya memanggil fungsi C. Jika pengecualian terjadi dalam fungsi Ctetapi tidak ditangani di C, pengecualian diteruskan ke Bdan kemudian ke A.

Jika tidak pernah ditangani, pesan kesalahan ditampilkan dan program kami tiba-tiba berhenti tiba-tiba.

Menangkap Pengecualian dengan Python

Di Python, pengecualian dapat ditangani menggunakan trypernyataan.

Operasi kritis yang dapat memunculkan pengecualian ditempatkan di dalam tryklausa. Kode yang menangani pengecualian ditulis dalam exceptklausa.

Dengan demikian kita dapat memilih operasi apa yang akan dilakukan setelah kita menangkap pengecualian. Berikut ini contoh sederhananya.

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()(0), "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Keluaran

Entri tersebut adalah Ups! terjadi. Entri berikutnya. Entri adalah 0 Ups! terjadi. Entri berikutnya. Entri adalah 2 Kebalikan dari 2 adalah 0,5

Dalam program ini, kami mengulang nilai-nilai dari daftar randomList. Seperti disebutkan sebelumnya, bagian yang dapat menyebabkan pengecualian ditempatkan di dalam tryblok.

Jika tidak ada pengecualian, exceptblok dilewati dan aliran normal berlanjut (untuk nilai terakhir). Tetapi jika terjadi pengecualian, itu ditangkap oleh exceptblok (nilai pertama dan kedua).

Di sini, kami mencetak nama pengecualian menggunakan modul exc_info()fungsi di dalam sys. Kita bisa melihat asebab ValueErrordan 0sebab itu ZeroDivisionError.

Karena setiap pengecualian dalam Python mewarisi dari Exceptionkelas dasar , kita juga dapat melakukan tugas di atas dengan cara berikut:

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except Exception as e: print("Oops!", e.__class__, "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Program ini memiliki keluaran yang sama dengan program di atas.

Menangkap Pengecualian Tertentu dengan Python

Dalam contoh di atas, kami tidak menyebutkan pengecualian khusus dalam exceptklausa.

Ini bukan praktik pemrograman yang baik karena akan menangkap semua pengecualian dan menangani setiap kasus dengan cara yang sama. Kita dapat menentukan pengecualian mana yang exceptharus ditangkap oleh klausa.

Sebuah tryklausul dapat memiliki sejumlah exceptklausa untuk menangani pengecualian yang berbeda, namun, hanya satu yang akan dieksekusi dalam kasus pengecualian terjadi.

Kita dapat menggunakan tupel nilai untuk menentukan beberapa pengecualian dalam klausa pengecualian. Berikut adalah contoh pseudo code.

 try: # do something pass except ValueError: # handle ValueError exception pass except (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError pass except: # handle all other exceptions pass

Meningkatkan Pengecualian dengan Python

Dalam pemrograman Python, pengecualian dimunculkan ketika kesalahan terjadi pada waktu proses. Kami juga dapat meningkatkan pengecualian secara manual menggunakan raisekata kunci.

Kami secara opsional dapat meneruskan nilai ke pengecualian untuk menjelaskan mengapa pengecualian itu dimunculkan.

 >>> raise KeyboardInterrupt Traceback (most recent call last):… KeyboardInterrupt >>> raise MemoryError("This is an argument") Traceback (most recent call last):… MemoryError: This is an argument >>> try:… a = int(input("Enter a positive integer: "))… if a <= 0:… raise ValueError("That is not a positive number!")… except ValueError as ve:… print(ve)… Enter a positive integer: -2 That is not a positive number!

Python coba dengan klausa else

Dalam beberapa situasi, Anda mungkin ingin menjalankan blok kode tertentu jika blok kode di dalamnya tryberjalan tanpa kesalahan. Untuk kasus ini, Anda dapat menggunakan elsekata kunci opsional dengan trypernyataan tersebut.

Catatan : Pengecualian di klausa else tidak ditangani oleh klausa kecuali klausa sebelumnya.

Mari kita lihat contohnya:

 # program to print the reciprocal of even numbers try: num = int(input("Enter a number: ")) assert num % 2 == 0 except: print("Not an even number!") else: reciprocal = 1/num print(reciprocal)

Keluaran

Jika kita melewati angka ganjil:

 Masukkan angka: 1 Bukan angka genap!

Jika kita melewatkan bilangan genap, kebalikannya dihitung dan ditampilkan.

 Masukkan angka: 4 0,25

Namun, jika kita meneruskan 0, kita dapatkan ZeroDivisionErrorkarena blok kode di dalamnya elsetidak ditangani oleh sebelumnya except.

 Enter a number: 0 Traceback (most recent call last): File "", line 7, in reciprocal = 1/num ZeroDivisionError: division by zero

Python try… finally

The try statement in Python can have an optional finally clause. This clause is executed no matter what, and is generally used to release external resources.

For example, we may be connected to a remote data center through the network or working with a file or a Graphical User Interface (GUI).

In all these circumstances, we must clean up the resource before the program comes to a halt whether it successfully ran or not. These actions (closing a file, GUI or disconnecting from network) are performed in the finally clause to guarantee the execution.

Here is an example of file operations to illustrate this.

 try: f = open("test.txt",encoding = 'utf-8') # perform file operations finally: f.close()

Jenis konstruksi ini memastikan bahwa file ditutup bahkan jika pengecualian terjadi selama eksekusi program.

Artikel yang menarik...