Movatterモバイル変換
[0]ホーム
[Python-Dev] PEP 415: Implementing PEP 409 differently
Yury Selivanovyselivanov.ml at gmail.com
Tue Feb 28 17:42:47 CET 2012
Big +1.Indeed, this whole Ellipsis approach is just an awful hack.-YuryOn 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-Devmailing list
[8]ページ先頭