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 <benja...@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@python.org > http://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > http://mail.python.org/mailman/options/python-dev/yselivanov.ml%40gmail.com _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com