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 문의 문법과 의미를 변경하여 try-except-finally 블록을 결합해 쓸 수 있도록 할 것을 제안합니다. 간단히 말해, 다음과 같이 작성하는 것이 유효해진다는 뜻입니다.:
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].
하지만 Guido에 따르면, 적어도 코어 해커에게는 구현하기가 식은 죽 먹기일 것이라고 합니다 [1].
이 패치는 2005년 12월 17일에 SVN 리비전 41740으로 커밋되었습니다 [3].
참고 문헌
Copyright
This document has been placed in the public domain.