次の Python 2.X のコードは、ご想像のとおり "a : 2" を出力します。
def f():
#a = 1
exec "a = 2" in globals(), locals()
for k,v in locals().items(): print k,":",v
#a = 3
f()
しかし、「a = 1」のコメントを外すと、予想していなかったように「a : 1」と出力されます。さらに奇妙なことに、「a = 3」の行のコメントを外すと、何も出力されません。
答えは locals() と globals() のドキュメント、またはこのような他の質問に埋もれていると思いますが、この症状を呼び出す価値があると思いました.
ここで Python インタープリターが何を考えているか、および回避策の提案を知りたいです。