Pengendalian Pengecualian Python Menggunakan pernyataan cuba, kecuali dan akhirnya

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

Video: Python Exception Handling (cuba… kecuali… akhirnya)

Pengecualian di Python

Python mempunyai banyak pengecualian terbina dalam yang timbul ketika program anda menghadapi ralat (sesuatu yang salah dalam program ini salah).

Apabila pengecualian ini berlaku, jurubahasa Python menghentikan proses semasa dan meneruskannya ke proses panggilan sehingga ditangani. Sekiranya tidak dikendalikan, program akan rosak.

Sebagai contoh, mari kita mempertimbangkan program di mana kita mempunyai fungsi Ayang memanggil fungsi B, yang pada gilirannya panggilan berfungsi C. Sekiranya pengecualian berlaku dalam fungsi Ctetapi tidak ditangani C, pengecualian diteruskan ke Bdan kemudian ke A.

Sekiranya tidak pernah ditangani, mesej ralat dipaparkan dan program kami tiba-tiba terhenti.

Menangkap Pengecualian di Python

Di Python, pengecualian dapat dikendalikan menggunakan trypernyataan.

Operasi kritikal yang dapat menimbulkan pengecualian diletakkan di dalam tryklausa. Kod yang menangani pengecualian ditulis dalam exceptklausa.

Oleh itu, kita dapat memilih operasi apa yang akan dilakukan setelah kita memperoleh pengecualian. Berikut adalah contoh mudah.

 # 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)

Pengeluaran

Entri adalah Oops! berlaku. Entri seterusnya. Entri adalah 0 Op! berlaku. Entri seterusnya. Entri adalah 2 Balasan 2 adalah 0.5

Dalam program ini, kita melihat nilai senarai randomList. Seperti yang telah disebutkan sebelumnya, bahagian yang boleh menyebabkan pengecualian diletakkan di dalam tryblok.

Sekiranya tidak ada pengecualian, exceptblok dilangkau dan aliran normal berterusan (untuk nilai terakhir). Tetapi jika ada pengecualian berlaku, ia tertangkap oleh exceptblok (nilai pertama dan kedua).

Di sini, kami mencetak nama pengecualian menggunakan exc_info()fungsi di dalam sysmodul. Kita dapat melihat asebab ValueErrordan 0sebab ZeroDivisionError.

Oleh kerana setiap pengecualian di Python mewarisi dari Exceptionkelas asas , kami 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 mempunyai output yang sama dengan program di atas.

Menangkap Pengecualian Khusus di Python

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

Ini bukan amalan pengaturcaraan yang baik kerana ia akan menangkap semua pengecualian dan menangani setiap kes dengan cara yang sama. Kami dapat menentukan pengecualian mana exceptklausa harus ada.

A tryfasal boleh mempunyai apa-apa bilangan exceptfasal untuk mengendalikan pengecualian yang berbeza, bagaimanapun, hanya satu akan dilaksanakan dalam kes pengecualian berlaku.

Kita dapat menggunakan tuple nilai untuk menentukan beberapa pengecualian dalam klausa kecuali. Berikut adalah contoh kod semu.

 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 di Python

Dalam pengaturcaraan Python, pengecualian dibangkitkan ketika kesalahan berlaku pada waktu runtime. Kami juga dapat meningkatkan pengecualian secara manual menggunakan raisekata kunci.

Kami boleh memberikan nilai ke pengecualian secara opsional untuk menjelaskan mengapa pengecualian tersebut ditimbulkan.

 >>> 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 cuba dengan klausa lain

Dalam beberapa situasi, anda mungkin ingin menjalankan blok kod tertentu jika blok kod di dalamnya tryberjalan tanpa kesalahan. Untuk kes ini, anda boleh menggunakan elsekata kunci pilihan dengan trypernyataan tersebut.

Catatan : Pengecualian dalam klausa lain tidak dikendalikan oleh yang terdahulu kecuali klausa.

Mari lihat contoh:

 # 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)

Pengeluaran

Sekiranya kita lulus nombor ganjil:

 Masukkan nombor: 1 Bukan nombor genap!

Sekiranya kita lulus nombor genap, timbal balik dihitung dan dipaparkan.

 Masukkan nombor: 4 0.25

Namun, jika kita lulus 0, kita dapat ZeroDivisionErrorkerana blok kod di dalamnya elsetidak dikendalikan 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 konstruk ini memastikan bahawa fail ditutup walaupun pengecualian berlaku semasa pelaksanaan program.

Artikel menarik...