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를 사용하는 것은 편법입니다. 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에 패치가 있습니다.

참고 문헌