Python – Exception handling

Exception handling in python is actually quite an interesting topic. In general, the exceptions in programming could be of three types:

  • syntactic errors – these would be noticed by your IDE or by the interpretor, thus you do not need to handle those;
  • logic errors – these are tough to find, as the program does not know what is in your head, while you are programming;
  • run-time errors – these are easy to spot (as the program stops in runtime) and could be handled through exception handling;

The standard hadler looks like this:

import sys, traceback

try:
    x = 5 / 0
except:
    Type, Value, Trace = sys.exc_info()
    print("Type: ", Type)
    print("Value:", Value)
    print("Trace:", Trace)
    traceback.print_exception(Type, Value, Trace, limit=10, file=sys.stdout)
    traceback.print_tb(Trace, limit=5, file=sys.stdout)
    print(traceback.format_exception(Type, Value, Trace, limit=10))
    print(traceback.format_exception_only(Type, Value))
else:
    print("No error found!")
finally:
    print("This code will be always printed!")

And the message it produces is actually quite useful:

 

Custom error class

There is a way to make a custom error class and handle the error message from there. In the code below, there is a custom error, thrown because the variable i is above 11, with notice “Not supposed to increase variable i aboive 10!”:

class MyError(Exception):
    def __init__(self, value):
        self.msg = value

    def __repr__(self):
        return self.msg

    def print_info(self):
        print(self)


try:
    i = 11
    if i > 10:
        raise MyError("Not supposed to increase variable 'i' above 10!")
except MyError as err:
    err.print_info()

Well, pretty much this is all I wanted to write. In general, it is good to explicitly state which exception is going to be handled by the code, using the various types of exceptions in Python – https://docs.python.org/3/library/exceptions.html