https://python.plainenglish.io/python-exception-handling-crafting-custom-exceptions-for-precise-error-control-26fb324a1227