Penanganan Eksepsi

12 views

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

Error sanggup terjadi akhir kesalahan struktur (sintaks) program. Hal ini disebut syntax error. Contohnya yakni menyerupai berikut:

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

Kita sanggup melihat bahwa penyebabnya yakni lupa titik dua pada pernyataan if.

Error juga sanggup terjadi pada dikala runtime (saat kegiatan berjalan). Error menyerupai 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 menawarkan semua eksepsi yang dimiliki Python

Eksepsi Penyebab Error
 AssertionError Muncul pada dikala pernyataan assert gagal
AttributeError Muncul pada dikala penugasan terhadap attribute atau acuan gagal
EOFError Muncul dikala fungsi input() mendapatkan kondisi final file (end-of-file)
FloatingPointError Muncul dikala operasi terhadap bilangan float gagal
GeneratorExit Muncul dikala metode close() generator dipanggil
ImportError Muncul dikala modul yang hendak diimpor tidak ditemukan
IndexError Muncul dikala indeks dari sequence berada di luar range
KeyError Muncul dikala suatu key tidak ditemukan di dalam dictionary
KeyboardInterrupt Muncul dikala user menekan tombol interupsi (Ctrl + C)
MemoryError Muncul dikala operasi kehabisan memori
NameError Muncul dikala variabel tidak ditemukan
NotImplementedError Muncul oleh metode abstrak
OSError Muncul dikala sistem operasi bersangkutan mengalami error
OverflowError Muncul dikala hasil operasi perhitungan terlalu besar untuk direpresentasikan
ReferenceError Muncul dikala weak reference dipakai untuk mengakses acuan sampah program
RuntimeError Muncul dikala error yang terjadi di luar semua kategori eksepsi lain
StopIteration Muncul oleh fungsi next() untuk menawarkan bahwa tidak ada lagi item yang tersisa pada iterator
SyntaxError Muncul oleh parser dikala terjadi kesalahan sintaks
IndentationError Muncul dikala ada indentasi yang salah
TabError Muncul dikala indentasi mempunyai jumlah spasi atau tab yang tidak konsisten
SystemError Muncul dikala interpreter mendeteksi kesalahan internal
SystemExit Muncul oleh fungsi sys.exit()
TypeError Muncul dikala melaksanakan operasi pada tipe data yang tidak sesuai
UnboundLocalError Muncul dikala acuan dibentuk untuk variabel lokal dari fungsi, tapi tidak ada nilainya.
UnicodeError Muncul dikala terjadi kesalahan berkenaan dengan encoding dan decoding unicode
UnicodeEncodeError Muncul dikala terjadi kesalahan pada proses encoding
UnicodeDecodeError Muncul dikala terjadi kesalahan pada proses decoding
UnicodeTranslateError Muncul dikala terjadi kesalahan berkenaan dengan penerjemahan unicode
ValueError Muncul dikala fungsi mendapatkan argumen yang tipe datanya salah
ZeroDivisionError Muncul dikala terjadi operasi pembagian bilangan dengan nol


Menangani Eksepsi Dengan Try, Except, dan Finally

Terjadinya eksepsi pada kegiatan sanggup menjadikan kegiatan terhenti. Untuk mencegah hal tersebut, kita harus mengantisipasi hal tersebut.

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

Di dalam blok try kita meletakkan baris kegiatan yang kemungkinan akan terjadi error. Bila terjadi error, maka penanganannya diserahkan kepada blok except. Berikut yakni 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 kegiatan di atas yakni menyerupai 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 kegiatan di atas kita mencari kebalikan dari bilangan, contohnya 4, maka kebalikannya yakni 1/4 = 0.25.

Pembagian dengan karakter ‘a’, dan juga dengan 0 tidak sanggup dilakukan, sehingga muncul error. Bila tidak dilakukan penanganan eksepsi, maka kegiatan akan eksklusif terhenti pada dikala terjadi error.


Menangani Eksepsi Tertentu

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

Sebuah pernyataan try, sanggup mempunyai sejumlah pernyataan except untuk menangani jenis – jenis eksepsi secara lebih spesifik. Kita juga sanggup mendefinisikan beberapa error sekaligus memakai tuple. Contohnya yakni menyerupai 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 yakni pernyataan yang tidak melaksanakan apa-apa. Istilahnya yakni statemen kosong. pass sering dipakai untuk mengisi blok fungsi atau kelas yang masih kosong.

Memunculkan Eksepsi

Eksepsi muncul jikalau terjadi error pada dikala runtime atau dikala kegiatan berjalan. Akan tetapi, kita juga sanggup memunculkan eksepsi dengan sengaja untuk maksud tertentu dengan memakai kata kunci raise. Contohnya yakni menyerupai 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 sanggup mempunyai pasangan pernyataan finally. Pernyataan di dalam blok finally akan tetap dihukum bagaimanapun kasusnya.

finally biasa dipakai untuk melepaskan koneksi dengan resource eksternal. Seperti contohnya dikala kita sedang mengedit suatu file di internet dan datang – datang internet terputus. Atau dikala kita login ke sentra data dan koneksi terputus.

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

Berikut yakni teladan try…finally untuk mengoperasikan file.

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

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

 

 

Author: 
    author
    No related post!