Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 415 – 예외 속성으로 컨텍스트 억제를 구현합니다.

Author:
Benjamin Peterson <benjamin at python.org>
BDFL-Delegate:
Alyssa Coghlan
Status:
Final
Type:
Standards Track
Created:
26-Feb-2012
Python-Version:
3.3
Post-History:
26-Feb-2012
Replaces:
409
Resolution:
Python-Dev message

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

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를 사용하는 것은 임시방편입니다. EllipsisPEP 409 이전에 확장 슬라이싱에서만 독점적으로 사용되었습니다. 확장 슬라이싱은 예외와 아무런 관련이 없으므로, 예외 객체를 살펴보는 사람이 __cause__Ellipsis로 설정해야 하는 이유를 명확히 알기 어렵습니다. __cause__에 기본적으로 Ellipsis를 사용하는 것은 __context__와 비대칭을 이룹니다.

제안

BaseException에 새로운 속성인 __suppress_context__를 도입합니다. __cause__가 설정될 때마다 __suppress_context__True로 설정됩니다. 특히 raise exc from cause 구문은 exc.__suppress_context__True로 설정합니다. 예외 출력 코드는 해당 속성을 확인하여 컨텍스트와 원인을 출력할지 결정합니다. __cause__는 원래의 목적과 값으로 돌아갑니다.

print_line_and_file 예외 속성에는 __suppress_context__에 대한 전례가 있습니다.

요약하면 raise exc from cause는 다음과 동등합니다.:

exc.__cause__ = cause
raise exc

여기서 exc.__cause__ = causeexc.__suppress_context__를 암묵적으로 설정합니다.

패치

Issue 14133에 패치가 있습니다.

참고 자료