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