bpo-45464: [doc] Explain that subclassing multiple exceptions is fragile (GH-29094)
Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
This commit is contained in:
parent
1dfac27dff
commit
dff0b71343
@ -34,6 +34,10 @@ class or one of its subclasses, and not from :exc:`BaseException`. More
|
|||||||
information on defining exceptions is available in the Python Tutorial under
|
information on defining exceptions is available in the Python Tutorial under
|
||||||
:ref:`tut-userexceptions`.
|
:ref:`tut-userexceptions`.
|
||||||
|
|
||||||
|
|
||||||
|
Exception context
|
||||||
|
-----------------
|
||||||
|
|
||||||
When raising (or re-raising) an exception in an :keyword:`except` or
|
When raising (or re-raising) an exception in an :keyword:`except` or
|
||||||
:keyword:`finally` clause
|
:keyword:`finally` clause
|
||||||
:attr:`__context__` is automatically set to the last exception caught; if the
|
:attr:`__context__` is automatically set to the last exception caught; if the
|
||||||
@ -67,6 +71,25 @@ exceptions so that the final line of the traceback always shows the last
|
|||||||
exception that was raised.
|
exception that was raised.
|
||||||
|
|
||||||
|
|
||||||
|
Inheriting from built-in exceptions
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
User code can create subclasses that inherit from an exception type.
|
||||||
|
It's recommended to only subclass one exception type at a time to avoid
|
||||||
|
any possible conflicts between how the bases handle the ``args``
|
||||||
|
attribute, as well as due to possible memory layout incompatibilities.
|
||||||
|
|
||||||
|
.. impl-detail::
|
||||||
|
|
||||||
|
Most built-in exceptions are implemented in C for efficiency, see:
|
||||||
|
:source:`Objects/exceptions.c`. Some have custom memory layouts
|
||||||
|
which makes it impossible to create a subclass that inherits from
|
||||||
|
multiple exception types. The memory layout of a type is an implementation
|
||||||
|
detail and might change between Python versions, leading to new
|
||||||
|
conflicts in the future. Therefore, it's recommended to avoid
|
||||||
|
subclassing multiple exception types altogether.
|
||||||
|
|
||||||
|
|
||||||
Base classes
|
Base classes
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
Mention in the documentation of :ref:`Built-in Exceptions
|
||||||
|
<bltin-exceptions>` that inheriting from multiple exception types in a
|
||||||
|
single subclass is not recommended due to possible memory layout
|
||||||
|
incompatibility.
|
Loading…
x
Reference in New Issue
Block a user