PEP 341 – try-except와 try-finally의 통합
- Author:
- Georg Brandl <georg at python.org>
- Status:
- Final
- Type:
- Standards Track
- Created:
- 04-May-2005
- Python-Version:
- 2.5
- Post-History:
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
개요
이 PEP는 try-except-finally 블록을 결합할 수 있도록 try 문의 구문과 의미에 변경을 제안합니다. 이는 요약하자면 다음과 같이 작성하는 것이 유효해진다는 것을 의미합니다.:
try:
<do something>
except Exception:
<handle the error>
finally:
<cleanup>
근거/제안
try-except 문과 try-finally 문 자체에는 많은 사용 사례가 있지만, 예외를 잡고 이후에 정리 코드를 실행해야 하는 경우가 흔히 있습니다. 다음과 같이 작성해야 한다는 것은 다소 성가시고 그다지 이해하기 쉽지 않습니다.:
f = None
try:
try:
f = open(filename)
text = f.read()
except IOError:
print 'An error occurred'
finally:
if f:
f.close()
그래서 다음과 같은 구성이:
try:
<suite 1>
except Ex1:
<suite 2>
<more except: clauses>
else:
<suite 3>
finally:
<suite 4>
기존의 다음 구성과 정확히 동일하게 되도록 제안합니다.:
try:
try:
<suite 1>
except Ex1:
<suite 2>
<more except: clauses>
else:
<suite 3>
finally:
<suite 4>
이는 하위 호환성을 유지하며, 오늘날 유효한 모든 try 문은 계속 동작할 것입니다.
문법 변경 사항
현재의 try 문 문법은:
try_stmt: ('try' ':' suite (except_clause ':' suite)+
['else' ':' suite] | 'try' ':' suite 'finally' ':' suite)
다음과 같이 바뀌어야 할 것입니다.:
try_stmt: 'try' ':' suite
(
(except_clause ':' suite)+
['else' ':' suite]
['finally' ':' suite]
|
'finally' ':' suite
)
구현
이 PEP의 저자는 현재 CPython 구현에 대한 충분한 지식을 갖고 있지 않으므로, 아쉽게도 구현을 제공할 수 없습니다. Thomas Lee가 패치 [2]를 제출했습니다.
하지만 귀도에 따르면, 적어도 핵심 해커에게는 이를 구현하는 [1] 것이 식은 죽 먹기여야 합니다.
이 패치는 2005년 12월 17일에 커밋되었으며, SVN 리비전 41740 [3] 입니다.
참고 문헌
Copyright
This document has been placed in the public domain.