2015年8月19日水曜日

Pythonの変数スコープ

Pythonのサンプルプログラムを見ていて気になることがあった。
例外処理でtry-catch-finallyの外側で変数宣言をしていないのに、tryとfinallyそれぞれで同じ変数を参照していた。 
 
try:
    instance = SomeClass()
    instance.getSomething()

except Exception, e:
    print 'Error %s' % e

finally:
    if instance is not None:
        instance.doSomething()

JavaやC++ではこのような書き方はエラーになるので非常に違和感があった。
そこで調べてみたところ、 Pythonでは変数のスコープは基本的に

  • クラス
  • 関数

この二つしかなくif分や例外等の制御構文ではスコープは存在しないということだった。
参考:Python の名前空間とスコープ

0 件のコメント:

コメントを投稿