Nested Try Blocks
If found, control is passed to the catch block matching the
type of the exception.
If no try block is found or if no catch block with a type
matching the exception is found, this process of returning
from a function and unwinding the stack continues until a
catch block of the appropriate type is found.
If none is found, the function terminate is called.
The catch block itself can throw an exception in two
ways:
1)   by throwing an exception with an associated operand of
some type, or
2)   by throwing an exception with no operand (called re-
throwing the exception).