例外処理で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 の名前空間とスコープ