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

Python 개선 제안 한국어 번역

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:


Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 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] 입니다.

참고 문헌