function_1 called function_2 → function_2 called finction_3, the call from function_1 will be at the bottom, then the call after will stack up layer by layer.
However, if function_3 is unhandled, then it propagates back up to function_2.
So the execution of function_3 stops.
if function_2 is unhandled, it propagates back up to function_1.
The programe will terminate if function_1 is unhandled.
Exception handling
What are exceptions used for?
Exceptions are not necessarily errors
indicate some sort of anomalous behavior
Sometime not even that consider StopIteration exception raised by iterators
after all we would expect this to happen → not really anomalous!