@@ -275,8 +275,27 @@ re-raise the exception::
275
275
Exception Chaining
276
276
==================
277
277
278
- The :keyword: `raise ` statement allows an optional :keyword: `from<raise> ` which enables
279
- chaining exceptions. For example::
278
+ If an unhandled exception occurs inside an :keyword: `except ` section, it will
279
+ have the exception being handled attached to it and included in the error
280
+ message::
281
+
282
+ >>> try:
283
+ ... open("database.sqlite")
284
+ ... except OSError:
285
+ ... raise RuntimeError("unable to handle error")
286
+ ...
287
+ Traceback (most recent call last):
288
+ File "<stdin>", line 2, in <module>
289
+ FileNotFoundError: [Errno 2] No such file or directory: 'database.sqlite'
290
+ <BLANKLINE>
291
+ During handling of the above exception, another exception occurred:
292
+ <BLANKLINE>
293
+ Traceback (most recent call last):
294
+ File "<stdin>", line 4, in <module>
295
+ RuntimeError: unable to handle error
296
+
297
+ To indicate that an exception is a direct consequence of another, the
298
+ :keyword: `raise ` statement allows an optional :keyword: `from<raise> ` clause::
280
299
281
300
# exc must be exception instance or None.
282
301
raise RuntimeError from exc
@@ -302,9 +321,8 @@ This can be useful when you are transforming exceptions. For example::
302
321
File "<stdin>", line 4, in <module>
303
322
RuntimeError: Failed to open database
304
323
305
- Exception chaining happens automatically when an exception is raised inside an
306
- :keyword: `except ` or :keyword: `finally ` section. This can be
307
- disabled by using ``from None `` idiom:
324
+ It also allows disabling automatic exception chaining using the ``from None ``
325
+ idiom::
308
326
309
327
>>> try:
310
328
... open('database.sqlite')
0 commit comments