Figure 20.4: Built-in exceptions
The class BaseException is the base class of all the built-in exception classes. From BaseException, four classes named Exception, SystemExit, KeyboardInterrupt and GeneratorExit are derived. All the remaining built-in exception classes are derived directly or indirectly from the Exception class. The figure shows some of the classes derived from Exception class; there are many other classes also.
These classes are all present in builtins module, you can import this module and use dir function on it to see all the exception class names.
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', …………… tuple', 'type', 'vars', 'zip']
Figure 20.8: How to handle an exception
else Block
Figure 20.10: try statements with else blocks
The try statement can have an optional else clause. The else block should be placed after all the except blocks. It executes only when the try block terminates normally. It will not be executed if any exception is raised in try block or if the try block terminates due to a break, continue or return statement. If finally block is present in the try statement, then the else block should be placed before the finally block.