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 문의 문법과 의미를 변경하여 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].

참고 문헌