Minggu, 15 Mei 2022

Cara Penanganan Pengecualian di Python


Pada aplikasi Python yang Anda buat bisa dilengkapi dengan penanganan terhadap pengecualian (exceptions handling) dari kelompok (tipe) kesalahan yang Anda tentukan. 

Proses penanganan pengecualian menggunakan pernyataan try yang berpasangan dengan except.
Misalnya kita ingin menangani pengecualian yang terjadi jika ada pembagian angka dengan nilai nol (0).

  1. z = 0

  2. 1 / z

  3. Traceback (most recent call last):

  4.  File "<stdin>", line 1, in <module>

  5. ZeroDivisionError: division by zero

  6.  

  7. try:

  8. ... x = 1 / z

  9. ... print(x)

  10. ... except ZeroDivisionError:

  11. ...     print('tidak bisa membagi angka dengan nilai nol')

  12. ...  

  13. tidak bisa membagi angka dengan nilai nol


Perhatikan bahwa operasi aplikasi berhenti di x = 1 / z, sedangkan bagian print(x) tidak sempat dioperasikan, karena aplikasi sudah mengalami pengecualian, sehingga yang tercetak adalah operasi print(‘tidak bisa membagi angka dengan nilai nol’).
Pada operasi yang dicontohkan di atas, penanganan pengecualian untuk ZeroDivisionError dilakukan sehingga aplikasi tidak lagi keluar dari eksekusi karena kesalahan, tapi digantikan dengan mencetak pesan ke layar. Pada contoh ini kita fokus pada penanganan pengecualian, meskipun ada cara lain untuk menyelesaikannya, misal menggunakan kondisi (percabangan) untuk menghindari nilai nol.
Pernyataan except dilanjutkan dengan kelompok (tipe) kesalahan yang ingin ditangani, atau bisa juga berupa tuple dari satu atau lebih tipe kesalahan yang akan ditangani. Di contoh berikut, menangani FileNotFoundError sebagai tuple satu elemen, jangan lupa dalam menuliskan tuple satu elemen harus tetap diakhiri dengan koma.

  1. >>> try:

  2. ...     with open('contoh_tidak_ada.py') as file:                   

  3. ...         print(file.read())                          

  4. ... except (FileNotFoundError, ):

  5. ...     print('file tidak ditemukan')

  6. ...  

  7. file tidak ditemukan


Pada operasi di atas, aplikasi akan membuka dan mengakses file bernama contoh_tidak_ada.py, tetapi file tersebut tidak ada di direktori dimana aplikasi Python tersebut berada, selanjutnya akan terjadi pengecualian (exceptions) tetapi ditangani, dalam pasangan pernyataan try dan except, sehingga aplikasi tidak terhenti tetapi tercetak di layar bahwa file tidak ditemukan.
Dalam aplikasi yang lebih kompleks, penanganan pengecualian dapat menggunakan pernyataan except lebih dari satu. Di contoh berikutnya akan menggunakan pernyataan except lebih dari satu (untuk satu pernyataan try), maupun menggunakan satu pernyataan except yang menangani lebih dari satu tipe kesalahan yang digabung dalam sebuah tuple.

  1. >>> d = {'ratarata': '10.0'}

  2. >>> try:

  3. ...     print('rata-rata: {}'.format(d['rata_rata']))

  4. ... except KeyError:                                 

  5. ...     print('kunci tidak ditemukan di dictionary')

  6. ... except ValueError:              

  7. ...     print('nilai tidak sesuai')

  8. ...  

  9. kunci tidak ditemukan di dictionary

  10. >>> try:

  11. ...     print('rata-rata: {}'.format(d['ratarata']/3))

  12. ... except KeyError:                                 

  13. ...     print('kunci tidak ditemukan di dictionary')

  14. ... except (ValueError, TypeError):

  15. ...     print('nilai atau tipe tidak sesuai')

  16. ...  

  17. nilai atau tipe tidak sesuai

  18. >>> try:

  19. ...     print('pembulatan rata-rata: {}'.format(int(d['ratarata'])))

  20. ... except (ValueError, TypeError) as e:         

  21. ...     print('penangan kesalahan: {}'.format(e))

  22. ...  

  23. penangan kesalahan: invalid literal for int() with base 10: '10.0'


Pada contoh tersebut, yang paling awal terjadi pengecualian untuk tipe kesalahan KeyError karena dalam dictionary d tidak memiliki kunci (key) rata_rata, yang ada adalah kunci ratarata.
Kemudian contoh selanjutnya terjadi pengecualian untuk tipe kesalahan TypeError karena nilai d[‘ratarata’] memiliki tipe string, sehingga tidak dapat dibagi dengan integer (angka) 3. Dalam penanganan kesalahannya, satu buah pernyataan except menangani tipe kesalahan ValueError atau TypeError, sehingga cocok salah satunya akan menampilkan ke layar bahwa nilai atau tipe tidak sesuai.
Di bagian paling akhir contoh, terjadi pengecualian untuk tipe kesalahan ValueError karena berusaha melakukan konversi (casting) dari sebuah string ke integer dengan format yang tidak sesuai (bilangan bulat seharusnya tidak memiliki titik dalam penulisannya). Dalam penulisan penanganan kesalahannya digunakan variasi lain untuk mendapatkan pesan kesalahan sebagai variabel e untuk kemudian variabel tersebut dicetak dalam pesan yang ditampilkan ke layar.
Bentuk lengkap dari pernyataan try dapat dilihat pada bagan berikut, terdiri dari pernyataan exceptelsefinally.
202201141653265de18b6bccc27cecdcae7712bc66c163.png

Menghasilkan Pengecualian

Dalam membuat aplikasi, ada kemungkinan Anda butuh untuk menghasilkan pengecualian (raise exceptions), salah satu caranya bisa dengan menggunakan pengecualian yang sudah ada, hanya ditambahkan informasi detailnya saja.
Misalnya dalam contoh berikut, Anda mewajibkan sebuah dictionary memiliki kunci (key) total.

  1. >>> d = {'ratarata': '10.0'}

  2. >>> if 'total' not in d:                                                                                                                         

  3. ...     raise KeyError('harus memiliki total')                                                                           

  4. ...                                                                                                                                              

  5. Traceback (most recent call last):                                                                                                               

  6.  File "<stdin>", line 2, in <module>                                                                                                            

  7. KeyError: 'harus memiliki total'


Posting Komentar