finallyとelse

このレッスンでできるようになること。tryelsefinally を足して、正常だったときだけの処理と、必ず行う後始末を書き分けられるようになります。

try には except のほかに二つの節を付けられます。

else は「try の中で例外が起きなかったとき」だけ動きます。成功したときのログや、次の処理へ進む部分をここへ置きます。try の中に書いてもよさそうですが、try は短いほど「どの行が失敗しうるか」がはっきりします。

finally は「例外が起きても起きなくても」必ず動きます。開いたファイルを閉じる、接続を切るといった後始末の定位置です。途中で return しても finally は実行されるので、閉じ忘れが起きません。

f = None try: f = open("kakeibo.txt", "w", encoding="utf-8") f.write("ノート 250\n") except ValueError as e: print("失敗しました", e) else: print("書き出しました") finally: if f is not None: f.close()

節を並べる順番は tryexceptelsefinally と決まっています。入れ替えると文法エラーになります。家計簿の保存処理のように「失敗しても後始末は要る」場面では、この形が定番になります。

要件

  1. lines が空のときは ValueError を投げて受け止め、失敗 保存するデータがありません を記録する
  2. 書き出せたときは else の節で 成功 件数 行を書き出しました を記録する
  3. finally の節で開いたファイルを閉じ、後始末を終えました を記録する
  4. 記録した文字列のリストを返す

入出力例

save_log(["ノート 250","牛乳 180"], "kakeibo_log.txt")["成功 2 行を書き出しました","後始末を終えました"] save_log([], "kakeibo_log.txt")["失敗 保存するデータがありません","後始末を終えました"]

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
学習モード

メモ

finallyとelse

⌘S で保存