Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Penanganan Pengecualian Python Menggunakan pernyataan coba, kecuali dan akhirnya

Penanganan Pengecualian Python Menggunakan pernyataan coba, kecuali dan akhirnya

Dalam tutorial ini, Anda akan mempelajari cara menangani pengecualian dalam program Python Anda menggunakan pernyataan try, exception, dan finally dengan bantuan contoh.

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

Pengecualian dengan Python

Python memiliki banyak pengecualian bawaan yang muncul saat program Anda mengalami kesalahan (ada yang salah dalam program).

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

Sebagai contoh, mari kita pertimbangkan sebuah program di mana kita memiliki fungsi A yang memanggil fungsi B , yang pada gilirannya memanggil fungsi C . Jika pengecualian terjadi pada fungsi C tetapi tidak ditangani di C , pengecualian diteruskan ke B lalu ke A .

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


Menangkap Pengecualian dengan Python

Dalam Python, pengecualian dapat ditangani menggunakan try pernyataan.

Operasi kritis yang dapat memunculkan eksepsi ditempatkan di dalam try ayat. Kode yang menangani pengecualian ditulis dalam except klausa.

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

The entry is a
Oops! <class 'ValueError'> occurred.
Next entry.

The entry is 0
Oops! <class 'ZeroDivisionError'> occured.
Next entry.

The entry is 2
The reciprocal of 2 is 0.5

Dalam program ini, kita mengulang nilai randomList daftar. Seperti disebutkan sebelumnya, bagian yang dapat menyebabkan pengecualian ditempatkan di dalam try blokir.

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

Di sini, kami mencetak nama pengecualian menggunakan exc_info() fungsi di dalam sys modul. Kita dapat melihat bahwa a menyebabkan ValueError dan 0 menyebabkan ZeroDivisionError .

Karena setiap pengecualian dalam Python mewarisi dari Exception dasar kelas, 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 output yang sama dengan program di atas.


Menangkap Pengecualian Spesifik dengan Python

Dalam contoh di atas, kami tidak menyebutkan pengecualian khusus apa pun di except klausa.

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

Sebuah try klausa dapat memiliki sejumlah except klausa untuk menangani pengecualian yang berbeda, namun, hanya satu yang akan dieksekusi jika pengecualian terjadi.

Kita dapat menggunakan tupel nilai untuk menentukan beberapa pengecualian dalam klausa kecuali. Berikut adalah contoh kode 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 dengan Python

Dalam pemrograman Python, pengecualian dimunculkan ketika kesalahan terjadi saat runtime. Kami juga dapat memunculkan pengecualian secara manual menggunakan raise kata kunci.

Secara opsional, kami dapat meneruskan nilai ke pengecualian untuk mengklarifikasi mengapa pengecualian itu muncul.

>>> 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 lain

Dalam beberapa situasi, Anda mungkin ingin menjalankan blok kode tertentu jika blok kode di dalam try berjalan tanpa kesalahan. Untuk kasus ini, Anda dapat menggunakan else opsional kata kunci dengan try pernyataan.

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

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:

Enter a number: 1
Not an even number!

Jika kita melewati angka genap, kebalikannya dihitung dan ditampilkan.

Enter a number: 4
0.25

Namun, jika kita melewati 0, kita mendapatkan ZeroDivisionError sebagai blok kode di dalam else tidak ditangani oleh except sebelumnya .

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

Python mencoba...akhirnya

try pernyataan dalam Python dapat memiliki finally opsional ayat. Klausa ini dijalankan apa pun yang terjadi, dan umumnya digunakan untuk melepaskan sumber daya eksternal.

Misalnya, kita mungkin terhubung ke pusat data jarak jauh melalui jaringan atau bekerja dengan file atau Graphical User Interface (GUI).

Dalam semua keadaan ini, kita harus membersihkan sumber daya sebelum program berhenti apakah berhasil dijalankan atau tidak. Tindakan ini (menutup file, GUI, atau memutuskan sambungan dari jaringan) dilakukan di finally klausul untuk menjamin eksekusi.

Berikut adalah contoh operasi file untuk mengilustrasikannya.

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.


Python

  1. Kata Kunci dan Pengidentifikasi Python
  2. Pernyataan Python, Indentasi dan Komentar
  3. Variabel Python, Konstanta dan Literal
  4. Konversi Jenis Python dan Pengecoran Jenis
  5. Masukan, Keluaran, dan Impor Python
  6. Pernyataan lulus python
  7. Variabel Python Global, Lokal dan Nonlokal
  8. Direktori Python dan Manajemen File
  9. Penanganan Pengecualian Python Menggunakan pernyataan coba, kecuali dan akhirnya
  10. Sensor Suhu Python dan Raspberry Pi