[Python]try~finally文中でreturn文を使ったときの動作

Python

Pythonドキュメントの日本語訳を読んでて気付いたんですが

returnによって、 finally節をともなう try文の外に処理が引き渡されると、実際に関数から抜ける前にfinally節が実行されます。

finally節 → return文なんですね。

せっかくなので動作確認してみると

def divide_int(dividend, divisor):
    try:
        quotient = dividend / divisor
        print '{0} / {1} = {2}'.format(dividend, divisor, quotient)
        return True
    except Exception as e:
        print 'error: {0}'.format(e.message)
        return False
    finally:
        print 'finally clause'

>>> divide_int(2,1)
2 / 1 = 2
finally clause
True

>>> divide_int(2,0)
error: integer division or modulo by zero
finally clause
False
  1. try節(except節)
  2. finally節
  3. try節(except節)のreturn文

って流れで、いったんtry節(except節)から抜けた後でまたtry節(except節)に戻ってくるのがなんか違和感なんですが、finally節は必ず実行されるからreturn文で関数(メソッド)から抜ける前に実行されるんでしょうね。

よく考えればそうなんですけど、あまり気にしてませんでした…w

この流れはbreak文でも同じみたいです。

勉強になりました。

最近、私はPythonでFXトレードのバックテスト(シミュレーション)をやって、良い結果が出たものをMetaTrader4のEAで実装して自動売買してます。

MetaTrader4でもバックテストはできるんですが、慣れるとPythonの方が圧倒的に早いんですよね。PythonでバックテストしてからEAで実装する手間を考えても、開発効率が良いです。

この本では

  • Pythonの環境構築
  • バックテストの実例
  • 機械学習による予測
  • リアルタイムデータの取得
  • 自動売買

まで網羅されていて、薄い本なので浅く広くという感は否めませんが、とっかかりの一冊としてはちょうど良いと思います。

コメント

タイトルとURLをコピーしました