Exceptions handlers (except
) are evaluated in the order they are written. Once a match is found, the evaluation stops.
In some contexts, an except block is dead code as it will never catch any exception:
- If there is a handler for a base class followed by a handler for class derived from that base class, the second handler will never trigger: The
handler for the base class will match the derived class, and will be the only executed handler.
- When multiple
except
statements try to catch the same exception class, only the first one will be executed.
- In Python 3,
BaseException
is the parent of every exception class. When a BaseException
is caught by an
except
clause, none of the subsequent except
statement will catch anything. This is true as well for the bare except
statement (except:
).