python exception hierarchy code example
Example 1: python exception list
AssertionError #Raised when assert statement fails.
AttributeError #Raised when attribute assignment or reference fails.
EOFError #Raised when the input() functions hits end-of-file condition.
FloatingPointError #Raised when a floating point operation fails.
GeneratorExit #Raise when a generator's close() method is called.
ImportError #Raised when the imported module is not found.
IndexError #Raised when index of a sequence is out of range.
KeyError #Raised when a key is not found in a dictionary.
KeyboardInterrupt #Raised when the user hits interrupt key (Ctrl+c or delete).
MemoryError #Raised when an operation runs out of memory.
NameError #Raised when a variable is not found in local or global scope.
NotImplementedError #Raised by abstract methods.
OSError #Raised when system operation causes system related error.
OverflowError #Raised when result of an arithmetic operation is too large to be represented.
ReferenceError #Raised when a weak reference proxy is used to access a garbage collected referent.
RuntimeError #Raised when an error does not fall under any other category.
StopIteration #Raised by next() function to indicate that there is no further item to be returned by iterator.
SyntaxError #Raised by parser when syntax error is encountered.
IndentationError #Raised when there is incorrect indentation.
TabError #Raised when indentation consists of inconsistent tabs and spaces.
SystemError #Raised when interpreter detects internal error.
SystemExit #Raised by sys.exit() function.
TypeError #Raised when a function or operation is applied to an object of incorrect type.
UnboundLocalError #Raised when a reference is made to a local variable in a function or method, but no value has been bound to that variable.
UnicodeError #Raised when a Unicode-related encoding or decoding error occurs.
UnicodeEncodeError #Raised when a Unicode-related error occurs during encoding.
UnicodeDecodeError #Raised when a Unicode-related error occurs during decoding.
UnicodeTranslateError #Raised when a Unicode-related error occurs during translating.
ValueError #Raised when a function gets argument of correct type but improper value.
ZeroDivisionError #Raised when second operand of division or modulo operation is zero.
Example 2: index error in python
# main.py
import datetime
from gw_utility.book import Book
from gw_utility.logging import Logging
def main():
try:
# Create list and populate with Books.
books = list()
books.append(Book("Shadow of a Dark Queen", "Raymond E. Feist", 497, datetime.date(1994, 1, 1)))
books.append(Book("Rise of a Merchant Prince", "Raymond E. Feist", 479, datetime.date(1995, 5, 1)))
books.append(Book("Rage of a Demon King", "Raymond E. Feist", 436, datetime.date(1997, 4, 1)))
# Output Books in list, with and without index.
Logging.line_separator('Books')
log_list(books)
Logging.line_separator('Books w/ index')
log_list(books, True)
# Output list element outside bounds.
Logging.line_separator('books[len(books)]')
Logging.log(f'books[{len(books)}]: {books[len(books)]}')
except IndexError as error:
# Output expected IndexErrors.
Logging.log_exception(error)
except Exception as exception:
# Output unexpected Exceptions.
Logging.log_exception(exception, False)
def log_list(collection, include_index=False):
"""Logs the each element in collection to the console.
:param collection: Collection to be iterated and output.
:param include_index: Determines if index is also output.
:return: None
"""
try:
# Iterate by converting to enumeration.
for index, item in enumerate(collection):
if include_index:
Logging.log(f'collection[{index}]: {item}')
else:
Logging.log(item)
except IndexError as error:
# Output expected IndexErrors.
Logging.log_exception(error)
except Exception as exception:
# Output unexpected Exceptions.
Logging.log_exception(exception, False)
if __name__ == "__main__":
main()