[Python-Dev] PEP 415: Implementing PEP 409 differently

Yury Selivanov yselivanov.ml at gmail.com
Tue Feb 28 17:42:47 CET 2012


Big +1.

Indeed, this whole Ellipsis approach is just an awful hack.

-
Yury

On 2012-02-26, at 8:30 PM, Benjamin Peterson wrote:

> PEP: 415
> Title: Implementing PEP 409 differently
> Version: $Revision$
> Last-Modified: $Date$
> Author: Benjamin Peterson <benjamin at python.org>
> Status: Draft
> Type: Standards Track
> Content-Type: text/x-rst
> Created: 26-Feb-2012
> Post-History: 26-Feb-2012
> 
> 
> Abstract
> ========
> 
> PEP 409 allows PEP 3134 exception contexts and causes to be suppressed when the
> exception is printed. This is done using the ``raise exc from None``
> syntax. This PEP proposes to implement context and cause suppression
> differently.
> 
> Rationale
> =========
> 
> PEP 409 changes ``__cause__`` to be ``Ellipsis`` by default. Then if
> ``__cause__`` is set to ``None`` by ``raise exc from None``, no context or cause
> will be printed should the exception be uncaught.
> 
> The main problem with this scheme is it complicates the role of
> ``__cause__``. ``__cause__`` should indicate the cause of the exception not
> whether ``__context__`` should be printed or not. This use of ``__cause__`` is
> also not easily extended in the future. For example, we may someday want to
> allow the programmer to select which of ``__context__`` and ``__cause__`` will
> be printed. The PEP 409 implementation is not amendable to this.
> 
> The use of ``Ellipsis`` is a hack. Before PEP 409, ``Ellipsis`` was used
> exclusively in extended slicing. Extended slicing has nothing to do with
> exceptions, so it's not clear to someone inspecting an exception object why
> ``__cause__`` should be set to ``Ellipsis``. Using ``Ellipsis`` by default for
> ``__cause__`` makes it asymmetrical with ``__context__``.
> 
> Proposal
> ========
> 
> A new attribute on ``BaseException``, ``__suppress_context__``, will be
> introduced. The ``raise exc from None`` syntax will cause
> ``exc.__suppress_context__`` to be set to ``True``. Exception printing code will
> check for the attribute to determine whether context and cause will be
> printed. ``__cause__`` will return to its original purpose and values.
> 
> There is precedence for ``__suppress_context__`` with the
> ``print_line_and_file`` exception attribute.
> 
> Patches
> =======
> 
> There is a patch on `Issue 14133`_.
> 
> 
> References
> ==========
> 
> .. _issue 14133:
>   http://bugs.python.org/issue6210
> 
> Copyright
> =========
> 
> This document has been placed in the public domain.
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/yselivanov.ml%40gmail.com



More information about the Python-Dev mailing list