https://medium.com/codex/understanding-python-exceptions-and-error-handling-a-theoretical-overview-with-illustrative-f2d362e62931