Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 415 – 使用异常属性实现上下文抑制

作者:
Benjamin Peterson <benjamin at python.org>
BDFL 委托
Alyssa Coghlan
状态:
最终版
类型:
标准跟踪
创建日期:
2012年2月26日
Python 版本:
3.3
发布历史:
2012年2月26日
取代:
409
决议:
Python-Dev 消息

目录

摘要

PEP 409 引入了 raise exc from None 构造的支持,允许显式抑制异常上下文的显示。本 PEP 保留了 PEP 409 中已实现的语言级更改,但将底层实现机制替换为一种更简单的方法,该方法基于所有 BaseException 实例上的新属性 __suppress_context__

PEP 接受

本 PEP 于 2012 年 5 月 14 日被 Alyssa Coghlan 接受。

基本原理

PEP 409__cause__ 默认为 Ellipsis。然后,如果 raise exc from None__cause__ 设置为 None,那么如果异常未被捕获,将不会打印上下文或原因。

该方案的主要问题是它使 __cause__ 的作用复杂化了。__cause__ 应该指示异常的原因,而不是指示是否应打印 __context__。这种对 __cause__ 的使用在未来也不容易扩展。例如,我们可能有一天希望允许程序员选择打印 __context____cause__ 中的哪一个。PEP 409 的实现不适合此目的。

使用 Ellipsis 是一种 HACK。在 PEP 409 之前,Ellipsis 仅用于扩展切片。扩展切片与异常无关,因此对于检查异常对象的人来说,不清楚为什么 __cause__ 应该设置为 Ellipsis。默认将 __cause__ 设置为 Ellipsis 使其与 __context__ 不对称。

提案

将在 BaseException 上引入一个新属性 __suppress_context__。每当设置 __cause__ 时,__suppress_context__ 将设置为 True。特别是,raise exc from cause 语法将 exc.__suppress_context__ 设置为 True。异常打印代码将检查该属性以确定是否打印上下文和原因。__cause__ 将恢复其原始用途和值。

__suppress_context__print_line_and_file 异常属性有先例。

总而言之,raise exc from cause 将等同于

exc.__cause__ = cause
raise exc

其中 exc.__cause__ = cause 隐式设置 exc.__suppress_context__

补丁

Issue 14133 上有一个补丁。


来源:https://github.com/python/peps/blob/main/peps/pep-0415.rst

最后修改:2025-02-01 08:59:27 GMT