で例外は、Pythonの:私は(Pythonの3.2.2で)次のコードをしようとした場合の割り当て
def f():
raise Exception
x = f()
x
がそのままであることが表示されます - それは未定義のままか、それが以前に持っていたどのような値に保つのいずれか。この動作は、代入の右辺が例外をスローするたびに保証されますか?私はこれが非常に基本的な質問であることを認識していますが、割り当てがどのくらい正確に機能するかに関する多くの情報は見つかりません。より一般的には、割り当てに関する何かが起こる前に、右辺全体が常に評価されていますか? setattr
を使用したり、リストの要素に割り当てたり、タプルのアンパック(例:x, y = y, f()
など)を使用している場合は、これは正しいですか?
を上昇させると代入の左側をタッチされることはありません、これは一貫している(ただPyPyでテスト、それはそこに同じです)が、私は」それがそうでなければならないという明示的な声明は見ていない。 –
正式な仕様がないと、これは少し難しくなります(C、C++、Java、JavaScriptなどの人は正式な仕様を引用できます)。しかし、実用的には、実装のどれもが逸脱し、その動作は、逸脱した実装が壊れてしまうほど十分に重要です。 – delnan