[Python-Dev] PEP 415: Implementing PEP 409 differently (original) (raw)
Benjamin Peterson benjamin at python.org
Mon Feb 27 02:30:10 CET 2012
- Previous message: [Python-Dev] cpython: Issue #14080: fix sporadic test_imp failure. Patch by Stefan Krah.
- Next message: [Python-Dev] PEP 415: Implementing PEP 409 differently
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
PEP: 415 Title: Implementing PEP 409 differently Version: RevisionRevisionRevision Last-Modified: DateDateDate 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.
- Previous message: [Python-Dev] cpython: Issue #14080: fix sporadic test_imp failure. Patch by Stefan Krah.
- Next message: [Python-Dev] PEP 415: Implementing PEP 409 differently
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]