Skip to content

Latest commit

 

History

History
 
 

12_exception

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Exceptions (Eksepsi)

Saat melakukan pemrograman di bahasa Python, pasti sebagian besar developer pernah mengalami kesalahan ketika mengeksekusi sebuah program yang dikenal dengan sebutan error. Hal ini terjadi karena ada kesalahan dalam menuliskan sintaks yang membuat program tersebut berhenti dan memunculkan pesan kesalahan (error) tersebut. Beberapa contoh kesalahan yang biasa kita lakukan ketika memprogram bahasa Python diantaranya:

  • Pernyataan if atau for yang tidak diikuti dengan tanda titik dua.

    >>> if True
      File "<stdin>", line 1
        if True
              ^
    SyntaxError: invalid syntax
  • Penggunaan tanda kurung yang salah.

    >>> print('contoh penulisan yang salah'))
      File "<stdin>", line 1
        print('contoh penulisan yang salah'))
                                            ^
    SyntaxError: invalid syntax

Error juga dapat terjadi saat program berjalan (runtime) yang disebut dengan eksepsi (exception). Beberapa contoh eksepsi yang biasa ditemukan adalah sebagai berikut:

  • ZeroDivisionError : suatu bilangan numerik tidak dapat dibagi dengan nol.

    >>> 2 / 0
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ZeroDivisionError: division by zero
  • TypeError : operasi aritmatika pada tipe data yang tidak sesuai, misalkan tidak dapat melakukan operasi penjumlahan antara integer dengan string.

    >>> 5 + "5"
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported operand type(s) for +: 'int' and 'str'

Exeption Handling (Penanganan Eksepsi)

Seperti yang sudah diketahui di awal bahwa terjadinya error atau exception menyebabkan program terhenti. Untuk mengantisipasi hal ini, Python menyediakan penanganan kesalahan tersebut menggunakan pernyataan try dan except. Letakkan baris program yang memiliki kemungkinan error di dalam blok try. Bila terjadi error di dalam blok try, tangani di dalam blok except. Struktur penulisan kodenya adalah sebagai berikut.

try:
    # eksekusi baris ini jika tidak ada kesalahan (error)
except:
    # tangani jika terdapat kesalahan di dalam blok try

Pada contoh eksepsi ZeroDivisionError di atas, jika ingin menangani eksepsi tersebut, maka di dalam blok try berisi baris kode untuk melakukan operasi pembagian dua buah bilangan. Sedangkan di dalam blok except berisi pesan kesalahan menggunakan sintaks print() bahwa suatu bilangan tidak dapat dibagi dengan nol, sehingga penulisannya sebagai berikut.

try:
    # karena pembaginya adalah nol, maka tangani error di except
    hasil = 5 / 0
    print('Hasil pembagian adalah =', hasil)
except:
    # tangani error di sini
    print('Bilangan tidak dapat dibagi dengan nol')

Pada contoh di atas, sebelum masuk ke dalam blok except, alangkah baiknya diikuti dengan jenis eksepsi yang ingin ditangani. Karena bisa saja terdapat lebih dari satu jenis eksepsi yang berbeda untuk ditangani. Pada contoh di atas, untuk menangani untuk eksepsi ZeroDivisionError, maka penulisan kodenya sebagai berikut:

try:
    # karena pembaginya adalah nol, maka tangani error di except
    hasil = 5 / 0
    print('Hasil pembagian adalah =', hasil)
except ZeroDivisionError:
    # tangani error di sini
    print('Bilangan tidak dapat dibagi dengan nol')

Jika kita ingin menangani lebih dari satu eksepsi, maka jenis eksepsi yang ingin disebutkan menggunakan tuple. Contoh, jika ingin menangani ZeroDivisionError dan TypeError, maka struktur penulisannya menjadi sebagai berikut:

try:
    # lakukan sesuatu
except (ZeroDivisionError, TypeError):
    # tangani error di sini

Eksepsi dapat ditangani menggunakan lebih dari satu blok except. Dari contoh kasus di atas, dapat dikembangkan sebagai berikut:

try:
    hasil = 5 / "2"
    print("Hasil pembagian adalah =", hasil)
except ZeroDivisionError:
    # tangani error jiia ada bilangan yang dibagi dengan nol di blok try
    print("Bilangan tidak dapat dibagi dengan nol")
except TypeError:
    # tangani error jika kedua bilangan berbeda tipe data di blok try
    print("Kedua bilangan berbeda tipe")

Selain itu, kita dapat menampilkan pesan kesalahan atau eksepsi bawaan Python dengan menambahkan alias menggunakan kata kunci as setelah jenis eksepsinya. Kemudian cetak pesan kesalahan dengan alias tersebut menggunakan print(). Contoh penulisannya sebagai berikut.

# Bentuk 1
try:
    hasil = 5 / "2"
    print("Hasil pembagian adalah =", hasil)
except ZeroDivisionError as err:
    print(err) # division by zero
except TypeError as err:
    print(err) # unsupported operand type(s) for /: 'int' and 'str'

# Bentuk 2
try:
    hasil = 3 / "1"
    print('Hasil pembagian adalah =', hasil)
except (ZeroDivisionError, TypeError) as err:
    # cetak pesan error tergantung jenis error yang ditangkap
    print(err)

Pernyataan finally

finally merupakan pernyataan yang selalu dieksekusi apapun hasil eksekusinya baik yang menghasilkan kesalahan (eksepsi) maupun tidak. Biasanya pernyataan finally dapat dipasangkan dengan try dan except sehingga menjadi pola try-finally maupun try-except-finally.

Contoh kode yang menggunakan pernyataan try-finally:

try:
    print(2 / 0)
finally:
    print("Baris ini selalu dieksekusi")

Output:

Baris ini selalu dieksekusi
Traceback (most recent call last):
  File "finally.py", line 3, in <module>
    hasil = 2 / 0
ZeroDivisionError: division by zero

Karena baris kode yang ada di dalam try terdapat kesalahan, maka baris kode yang ada di dalam finally dieksekusi, kemudian munculkan kesalahannya. Sebaliknya, jika baris kode yang ada di dalam try tidak ada masalah, maka dieksekusi dan baris kode yang ada di dalam finally juga dieksekusi.

Agar kesalahan dapat ditangani terlebih dahulu, gunakan pernyataan except.

try:
    print(3 / "2")
except TypeError as err:
    print("Kesalahan :",err)
finally:
    print("Baris ini selalu dieksekusi")

Output:

Kesalahan : unsupported operand type(s) for /: 'int' and 'str'
Baris ini selalu dieksekusi

Karena terdapat kesalahan di dalam try, maka ditangani di dalam except. Kemudian, baris kode yang ada di dalam finally juga dieksekusi.

Materi Selanjutnya