Penanganan Eksepsi

Pada dikala menulis dan menjalankan program, kita sering dihadapkan pada munculnya kesalahan atau error. Seringkali error mengakibatkan acara berhenti sendiri.





Error mampu terjadi simpulan kesalahan struktur (sintaks) program. Hal ini disebut syntax error. Contohnya yaitu ibarat berikut:



>>> if x < 5
File "<stdin>", line 1
if x < 5
^
SyntaxError: invalid syntax


Kita mampu melihat bahwa penyebabnya yaitu lupa titik dua pada pernyataan if.



Error juga mampu terjadi pada dikala runtime (saat acara berjalan). Error ibarat ini disebut eksepsi. Misalnya, jikalau kita membuka file yang tidak ada, maka akan muncul pesan kesalahan FileNotFoundError. Bila kita membagi bilangan dengan nol akan muncul ZeroDivisionError, dan lain sebagainya.



Pada dikala terjadi eksepsi, Python akan menampilkan traceback dan detail dimana kesalahan terjadi.



>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero




Daftar Eksepsi Built-in Python



Tabel berikut memperlihatkan semua eksepsi yang dimiliki Python































































































































































































EksepsiPenyebab Error
 AssertionErrorMuncul pada dikala pernyataan assert gagal
AttributeErrorMuncul pada dikala penugasan terhadap attribute atau contoh gagal
EOFErrorMuncul dikala fungsi input() mendapat kondisi final file (end-of-file)
FloatingPointErrorMuncul dikala operasi terhadap bilangan float gagal
GeneratorExitMuncul dikala metode close() generator dipanggil
ImportErrorMuncul dikala modul yang hendak diimpor tidak ditemukan
IndexErrorMuncul dikala indeks dari sequence berada di luar range
KeyErrorMuncul dikala suatu key tidak ditemukan di dalam dictionary
KeyboardInterruptMuncul dikala user menekan tombol interupsi (Ctrl + C)
MemoryErrorMuncul dikala operasi kehabisan memori
NameErrorMuncul dikala variabel tidak ditemukan
NotImplementedErrorMuncul oleh metode abstrak
OSErrorMuncul dikala sistem operasi bersangkutan mengalami error
OverflowErrorMuncul dikala hasil operasi perhitungan terlalu besar untuk direpresentasikan
ReferenceErrorMuncul dikala weak reference digunakan untuk mengakses contoh sampah program
RuntimeErrorMuncul dikala error yang terjadi di luar semua kategori eksepsi lain
StopIterationMuncul oleh fungsi next() untuk memperlihatkan bahwa tidak ada lagi item yang tersisa pada iterator
SyntaxErrorMuncul oleh parser dikala terjadi kesalahan sintaks
IndentationErrorMuncul dikala ada indentasi yang salah
TabErrorMuncul dikala indentasi memiliki jumlah spasi atau tab yang tidak konsisten
SystemErrorMuncul dikala interpreter mendeteksi kesalahan internal
SystemExitMuncul oleh fungsi sys.exit()
TypeErrorMuncul dikala melakukan operasi pada tipe data yang tidak sesuai
UnboundLocalErrorMuncul dikala contoh dibuat untuk variabel lokal dari fungsi, tapi tidak ada nilainya.
UnicodeErrorMuncul dikala terjadi kesalahan berkenaan dengan encoding dan decoding unicode
UnicodeEncodeErrorMuncul dikala terjadi kesalahan pada proses encoding
UnicodeDecodeErrorMuncul dikala terjadi kesalahan pada proses decoding
UnicodeTranslateErrorMuncul dikala terjadi kesalahan berkenaan dengan penerjemahan unicode
ValueErrorMuncul dikala fungsi mendapat argumen yang tipe datanya salah
ZeroDivisionErrorMuncul dikala terjadi operasi pembagian bilangan dengan nol




Menangani Eksepsi Dengan Try, Except, dan Finally



Terjadinya eksepsi pada acara mampu mengakibatkan acara terhenti. Untuk mencegah hal tersebut, kita harus mengantisipasi hal tersebut.



Python menyediakan metode penanganan eksepsi dengan menggunakan pernyataan try dan except.



Di dalam blok try kita meletakkan baris acara yang kemungkinan akan terjadi error. Bila terjadi error, maka penanganannya diserahkan kepada blok except. Berikut yaitu teladan penanganan eksepsi pada operasi pembagian bilangan.




# import modul sys untuk memperoleh jenis eksepsi
import sys


lists = ['a', 0, 4]
for each in lists:
try:
print("Masukan:", each)
r = 1/int(each)
break
except:
print("Upps!", sys.exc_info()[0], " terjadi.")
print("Masukan berikutnya.")
print()
print("Kebalikan dari ", each, " =", r)


Keluaran acara di atas yaitu ibarat berikut ini:



Masukan: a
Upps! <class 'ValueError'> terjadi
Masukan berikutnya.

Masukan: 0
Upps! <class 'ZeroDivisionError'> terjadi
Masukan berikutnya.

Masukan: 4
Kebalikan dari 4 = 0.25


Pada acara di atas kita mencari kebalikan dari bilangan, misalnya 4, maka kebalikannya yaitu 1/4 = 0.25.



Pembagian dengan huruf ‘a’, dan juga dengan 0 tidak mampu dilakukan, sehingga muncul error. Bila tidak dilakukan penanganan eksepsi, maka acara akan pribadi terhenti pada dikala terjadi error.





Menangani Eksepsi Tertentu



Pada teladan di atas kita hanya menangani error secara umum. Tidak dikelompokkan, apakah dia yaitu TypeError, ValueError, SyntaxError, dan lain sebagainya.



Sebuah pernyataan try, mampu memiliki sejumlah pernyataan except untuk menangani jenis – jenis eksepsi secara lebih spesifik. Kita juga mampu mendefinisikan beberapa error sekaligus menggunakan tuple. Contohnya yaitu ibarat berikut:



try:
# lakukan sesuatu
pass

except ValueError:
# tangani eksepsi ValueError
pass

except (TypeError, ZeroDivisionError):
# menangani multi eksepsi
# TypeError dan ZeroDivisionError
pass

except:
# menangani eksepsi lainnya
pass


Pernyataan pass yaitu pernyataan yang tidak melakukan apa-apa. Istilahnya yaitu statemen kosong. pass sering digunakan untuk mengisi blok fungsi atau kelas yang masih kosong.



Memunculkan Eksepsi



Eksepsi muncul jikalau terjadi error pada dikala runtime atau dikala acara berjalan. Akan tetapi, kita juga mampu memunculkan eksepsi dengan sengaja untuk maksud tertentu dengan menggunakan kata kunci raise. Contohnya yaitu ibarat berikut:



>>> raise KeyboardInterrupt
Treceback (most recent call last):
...
KeyboardInterrupt

>>> try:
a = int(input("Masukkan sebuah bilangan positif: "))
if a <= 0:
raise ValueError("Itu bukan bilangan positif!")
except ValueError as ve:
print(ve)

Masukkan sebuah bilangan positif: -3
Itu bukan bilangan positif!




try…finally



Pernyataan try mampu memiliki pasangan pernyataan finally. Pernyataan di dalam blok finally akan tetap dieksekusi bagaimanapun kasusnya.



finally biasa digunakan untuk melepaskan koneksi dengan resource eksternal. Seperti misalnya dikala kita sedang mengedit suatu file di internet dan tiba – tiba internet terputus. Atau dikala kita login ke pusat data dan koneksi terputus.



Pada problem tersebut, kita harus membersihkan resource yang digunakan, terlepas ia sukses atau tidak. Aksi tersebut (menutup file, atau memutus koneksi ke jaringan) dilakukan dengan menggunakan pernyataan finally untuk menjamin suatu perintah tetap dieksekusi.



Berikut yaitu teladan try…finally untuk mengoperasikan file.



try:
f = open("C:\\test.txt")
# melakukan operasi terhadap file
finally:
f.close()


finally menjamin bahwa file akan tetap di tutup walaupun ada error pada dikala operasi terhadap file.



 



 



Popular posts from this blog

Subitems Listview Berwarna Selang Seling

Source Code Aplikasi Tagihan Internet Memakai Php