用語比較
try文のelse節とfinally節の違い|実行される条件と例外の扱い(Python3基礎)
try文のelse節とfinally節は、どちらも「後ろに書く節」なので、例外が出なかったときに動く節だと混同しやすい組です。実際には、else節は例外が出なかったときだけ、finally節は例外の有無にかかわらず動きます。
elseは「例外が出なかったときだけ」、finallyは「出ても出なくても必ず」。例外が出ると else は飛ばされ、finally は動くと覚えると、出力順を問う問題を切り分けられます。
このページは、Python公式チュートリアル「8. エラーと例外」の記述と、Python 3.9.6での実行結果をもとに比べます。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
else節
try節で全く例外が送出されなかったときに実行される。すべてのexcept節より後ろに置く。
finally節
try文が例外を発生させるか否かに関わらず実行される。後片付けの動作を書く。
出力順
例外なしは try→else→finally、例外ありは try→except→finally。例外ありではelseは実行されない。
違いを表で確認
| 比較軸 | else節 | finally節 |
|---|---|---|
| 実行される条件 | else:try節で例外が送出されなかったときだけ実行される | finally:例外が出ても出なくても実行される |
| 例外が出たとき(exceptで処理した場合) | else:実行されない。try→except→finally の順になる | finally:最後に実行される |
| exceptで処理されない例外 | else:実行されない | finally:実行されたあとに、その例外が再送出される |
| 節の役割 | else:成功後に続けるコードを置く。ここで起きた例外は、同じtry文のexcept節では捕捉されない | finally:ファイルなどの外部リソースの解放のような、後片付けの動作を置く |
| returnとの関係 | else:try節の中のreturnに達すると、else節は実行されない | finally:try節のreturnの直前に実行される。finally節にreturnを書くとその値が返る(推奨されない) |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
出力順を答える問題で、例外が出る場合の else の扱いに迷う人
例外が出ると else は実行されません。try→except→finally の順です。
ファイルなどを、成功しても失敗しても閉じたい人
どちらの場合も動くのは finally です。公式チュートリアルも、finally は外部リソースを解放するのに便利だと述べます。
try節には失敗しうる処理だけを書き、成功後の処理を分けたい人
成功後の処理は else に書きます。公式チュートリアルは、追加のコードは try 節より else 節に置くほうがよいと述べます。
具体例で使い分ける
例 1
例外が出る場合と出ない場合の出力順
10 // n を try 節に書き、ZeroDivisionError を except 節で処理して、else 節と finally 節でそれぞれ印を残します。
- n=2 のときは例外が出ないので、['try', 'else', 'finally'] の順に動きます。
- n=0 のときは ZeroDivisionError が出るので、['try', 'except', 'finally'] の順になり、else は動きません。
結論: finally はどちらの場合も最後に動き、else は例外が出ない場合だけ動きます。
例 2
exceptで処理されない例外が出る場合
1 / "a" で TypeError が出ますが、except は ValueError しか処理しない場合です。
- TypeError は except 節に一致しないので、そのまま外へ伝わる流れになります。
- Python 3.9.6で確かめると、先に finally 節が実行され、そのあとで TypeError が再送出されました。
結論: 処理されない例外でも、finally は先に実行されます。
例 3
try節の中で return する場合と、else節で例外が出る場合
try 節で return "try" を実行する関数と、else 節で int("x") を実行する場合を調べます。
- try 節が return に達すると、その直前に finally 節が実行されます。実際に finally の print が先に出て、戻り値は "try" でした。
- else 節で int("x") が ValueError になった場合、同じ try 文に except ValueError があっても捕捉されず、finally 実行後に ValueError が外へ伝わりました。
結論: return の前にも finally は動きます。else の中の例外は、同じ try 文の except では処理されません。
問題文から答えを選ぶ手順
- 1
例外が出たかを見る
出ていなければ else が動きます。出ていれば else は飛ばされます。
- 2
except に一致するかを見る
一致すればその except が動き、一致しなければ finally のあとに例外が再送出されます。
- 3
finally を最後に足す
どの経路でも finally は動きます。try 節が return・break・continue に達した場合も、その直前に動きます。
試験での見分け方
- 1else節は、try節で例外が送出されなかったときだけ実行される。
- 2finally節は、例外の有無にかかわらず実行される。
- 3例外が出た場合は else を飛ばし、except(一致した場合)→ finally の順になる。
- 4exceptで処理されなかった例外は、finallyの実行後に再送出される。
誤答しやすい選択肢
例外が出たときも else が動くと考える
修正: else は例外が出なかったときだけです。例外が出ると try→except→finally になります。
finally は例外が出たときだけ動くと考える
修正: finally は例外が出なくても動きます。例外なしの流れは try→else→finally です。
else節の中の例外が同じtry文のexceptで捕捉されると考える
修正: else 節の中の例外は、同じ try 文の except 節では処理されません。
確認問題
Q1例外が出ない場合、try→else→finally の順に動きますか?
答え: 動く
else は例外なしのときに、finally は常に実行されます。
Q2except で処理した場合、else は実行されますか?
答え: 実行されない
else は try 節で例外が送出されなかったときだけ実行されます。
Q3except に一致しない例外が出た場合、finally は実行されますか?
答え: 実行され、そのあとで例外が再送出される
処理されなかった例外は、finally 節の実行後に再送出されます。
到達チェック
- else が動くのは例外が出ないときだけだと言える
- finally は例外の有無にかかわらず動くと言える
- 例外ありの出力順が try→except→finally だと言える
関連ページで確認する
同じ資格で次に知りたいこと
- rangeとlistの違い|リストに見えて実はリストではない(Python3基礎)
rangeとlistの違いを、Python公式チュートリアル4.3の記述(rangeはリストのように振る舞うが本当はリストではない)とPython 3.9.6の実行結果で整理。printの表示、要素の変更、list()で変える場面を切り分ける判断手順と確認問題つき。
- Decimalとfloatの違い|0.70×1.05が0.74と0.73に分かれる理由(Python3基礎)
Decimalとfloatの違いを、Python公式チュートリアル11.8の記述とPython 3.9.6の実行結果で整理。10進浮動小数と2進浮動小数の計算結果の差、等値テスト、Decimal(0.1)とDecimal('0.1')の違いを、確認問題つきで確認します。
- setとfrozensetの違い|あとから変更できるか、辞書のキーにできるか(Python3基礎)
setとfrozensetの違いを、Python公式ドキュメントの記述(setは変更可能でハッシュ値を持たない、frozensetは変更不可でハッシュ可能)とPython 3.9.6の実行結果で整理。辞書のキーにできるか、addが使えるかを切り分ける判断手順と確認問題つき。
よくある質問
Qtry文のelse節とfinally節の違いは?
else節は、try節で例外が送出されなかったときだけ実行されます。finally節は、例外が出ても出なくても実行されます。
Q例外が出たとき、else節は実行されますか?
実行されません。except節で処理した場合は、try→except→finally の順になります。
Qfinally節はいつ使いますか?
ファイルなどの外部リソースを、成功したかどうかにかかわらず解放したいときに使います。公式チュートリアルも、この用途で便利だと述べます。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
