Membuat Custom Exception

Contoh program sederhana menghitung luas area segitiga menggunakan Heron’s Formula.

import math

def luas_segitiga(a, b, c):
    s = (a + b + c) / 2
    l = math.sqrt(s * (s-a) * (s-b) * (s-c))
    return l
>>> from heron import *
>>> luas_segitiga(3, 4, 5)
6.0
>>> luas_segitiga(3, 4, 10)  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "F:\Project\pyErrHandling\heron.py", line 5, in luas_segitiga
    l = math.sqrt(s * (s-a) * (s-b) * (s-c))
ValueError: math domain error

ketika parameter yang dikirim salah, error yang tampil tidak spesifik. Kita bisa buat custom exception, kita beri nama TriangleError yang di inherit dari Exception class (bukan BaseException).

Berikut basic definition dari custom exception yang akan kita buat. Ini sudah cukup untuk handling error.

import math

class TriangleError (Exception):
    pass

def luas_segitiga(a, b, c):
    sides = sorted((a, b, c))
    if sides[2] > sides [0] + sides [1]:
        raise TriangleError("Segitiga Error")

    s = (a + b + c) / 2
    l = math.sqrt(s * (s-a) * (s-b) * (s-c))
    return l

Untuk memberikan error report yang lebih jelas, mari kita override method init, str dan repr dan tambahkan property pada class TriangleError. Lihat code dibawah.

import math

class TriangleError (Exception):
    def __init__ (self, text, sides):
        super().__init__(text)
        self._sides = tuple(sides)
    
    @property
    def sides(self):
        return self._sides
    
    def __str__(self):
        return "'{}' for sides {}".format(self.args[0], self._sides)

    def __repr__(self):
        return "TriangleError({!r}, {!r})".format(self.args[0], self._sides)


def luas_segitiga(a, b, c):
    sides = sorted((a, b, c))
    if sides[2] > sides [0] + sides [1]:
        raise TriangleError("Segitiga Error", sides)

    s = (a + b + c) / 2
    l = math.sqrt(s * (s-a) * (s-b) * (s-c))
    return l

Sharing is caring:

Leave a Comment