PEP-JP: 341 オリジナルのヘッダ =================== PEP: 341 Title: Unifying try-except and try-finally Version: 456161 Last-Modified: 2006-04-21 17:22:45 +0200 (Fri, 21 Apr 2006) Author: Georg Brandl Status: Final Type: Standards Track Content-Type: text/plain Created: 04-May-2005 Post-History: 概要 このPEPはtry文のシンタックスとセマンティクスにtry-except-finallyブ ロックを含められるようにする変更を提案します。簡単に言うと以下のよ うに書けます。 try: <処理> except Exception: <エラー処理> finally: <後処理> 理由/提案 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: except Ex1: else: finally: この構文は以下の以前の書き方と同じ意味です。 try: try: except Ex1: else: finally: これは後方互換性があり、今日まで正しかった全ての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の実装に対する十分な知識を持っていませんの で、残念ながらこのPEPを実装することは出来ません。 Thomas Leeは patch[2]をサブミットしています。 しかしながら、Guidoによれば、実装は簡単なはずだそうです[1]。 -- 少 なくともコアハッカーにとってはこの提案の実装は簡単なことのようです。 このパッチは2005年12月17日にSVNのリビジョン41740 [3]としてコミット されました。 リファレンス [1] http://mail.python.org/pipermail/python-dev/2005-May/053319.html [2] http://python.org/sf/1355913 [3] http://mail.python.org/pipermail/python-checkins/2005-December/048457.html 著作権 このドキュメントはパブリックドメインです。 Local Variables: mode: indented-text indent-tabs-mode: nil sentence-end-double-space: t fill-column: 70 End: