http://www.pythonreader.com/2024/04/using-raise-for-effective-exceptions.html