pep for changing pep 409 implementation
This commit is contained in:
parent
574066ff11
commit
91cc261ef6
|
@ -0,0 +1,78 @@
|
|||
PEP: 415
|
||||
Title: Implementing PEP 409 differently
|
||||
Version: $Revision$
|
||||
Last-Modified: $Date$
|
||||
Author: Benjamin Peterson <benjamin@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.
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
mode: indented-text
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 70
|
||||
coding: utf-8
|
||||
End:
|
Loading…
Reference in New Issue