Memahami Hirarki Exception

Python menggunakan class inheritance untuk mengorganisasikan hirarki exception. Silakan lihat exception hirarki di https://docs.python.org/3/library/exceptions.html#exception-hierarchy (versi python 3).

Program dibawah melakukan catch dengan exception yang berbeda, namun memiliki tujuan yang sama.

def hirarki():
    s = [1, 3, 6]
    try:
        item = s[4]
    except IndexError:
        print("Index Error")

    d = dict(a=21, b=44, c=87)
    try:
        value = d['e']
    except KeyError:
        print("Key Error")

Jika kita lihat hirarki dari class exception, dengan menggunakan perintah __mro__ , IndexError dan KeyError memiliki parent class yang sama, yaitu LookupError.

>>> IndexError.__mro__
(<class 'IndexError'>, <class 'LookupError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
>>> KeyError.__mro__   
(<class 'KeyError'>, <class 'LookupError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)

Kita dapat melakukan catcth dengan menggunakan parent class untuk hasil yang sama. Lihat code dibawah, digunakan LookupError untuk handling error yang berbeda.

Walaupun digunakan class yang lebih general, detail object exception yang diterima adalah sesuai class originalnya. Contoh, saat menggunakan exception LookupError, detail exception yang diterima tetap IndexError atau KeyError. Jadi kita tetap memiliki akses untuk menampilkan detail error.

def hirarki():
    s = [1, 3, 6]
    try:
        item = s[4]
    except LookupError:
        print("Index Error")

    d = dict(a=21, b=44, c=87)
    try:
        value = d['e']
    except LookupError:
        print("Key Error")

Kesimpulan

Walaupun kita bisa menggunakan parent class untuk catch exception yg lebih general, disarankan untuk tetap menggunakan spesifik exception.

Untuk melihat hirarki dari exception class, digunakan perintah __mro__

Sharing is caring:

Leave a Comment