Files

49 lines
1.0 KiB
Python

class InvalidTypeError(Exception):
def __init__(self, value, code, detail, *args) -> None:
super().__init__(value, *args)
self.code = code
self.detail = detail
def __repr__(self) -> str:
return self.detail
def check(v, klass):
klass_names = [k.__name__ for k in klass]
if not isinstance(v, tuple(klass)):
raise InvalidTypeError(
f"{v.__class__.__name__} class is unknown, use {klass_names}.",
code=500,
detail={"value": v, "type": v.__class__.__name__},
)
return v
def add(a, b):
klass = [int, float]
try:
a = check(a, klass)
b = check(b, klass)
except InvalidTypeError as e:
error = {
"name": InvalidTypeError.__name__,
"code": e.code,
"detail": e.detail,
}
raise TypeError(error) from e
return a + b
def main():
try:
print(add(1, "2"))
except TypeError as e:
print(e.args)
if __name__ == '__main__':
main()