Chapter 26. Designing with Exceptions
This chapter rounds out Part VII, with a collection of exception design topics and examples, followed by this part’s gotchas and exercises. Because this chapter also closes out the core language material of this book, it also includes a brief overview of development tools, by way of migration to the rest of this book.
Nesting Exception Handlers
Our examples so far have used only a single try
to
catch exceptions, but what happens if one try
is
physically
nested
inside another? For that matter, what does it mean if a
try
calls a function that runs another
try
? Technically, try
statements can nest in terms of both syntax, and
the runtime control flow through your code.
Both these cases can be understood if you realize that Python
stacks
try
statements at runtime. When an exception is
raised, Python returns to the most recently entered
try
statement with a matching
except
clause. Since each try
statement leaves a marker, Python can jump back to earlier
try
s by inspecting the markers stacked. This
nesting of active handlers is what we mean by
“higher”
handlers—try
statements entered earlier in
the program’s execution flow.
For example, Figure 26-1 illustrates what occurs
when try
/except
statements nest
at runtime. Because the amount of code that can go into a
try
clause block can be substantial (e.g., function calls), it will typically invoke other code that may be watching for the same exception. When the exception is eventually raised, Python jumps ...
Get Learning Python, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.