2

私はオープン ソースの中間 Python ブックに取り組んでおり、多くの PEP を調べています。PEP310には、"with" ステートメントに関する古い提案がありますこの提案は最終的に却下されましたが、次の文が印象に残りました。

誰かが獲得をトライの中に入れると物事がどのように変化するかについて詳しく説明できますか? 私の理解では、Python での取得呼び出しは、ロックが正常に取得されたかどうかを示すブール値を返すだけなので、それを try ブロック内に配置するとどう変わるのでしょうか?

4

1 に答える 1

6

これが言及しているものだと思います:

try:
    lock.acquire()
finally:
    lock.release()

acquire()例外が発生した場合は、成功しなかったrelease()場合でも呼び出されます。現在ロックされていないロックをacquire()呼び出すと、別の例外が発生する可能性があります。つまり、問題の根本に間接的にのみ関連する例外です。release()

ブロックを記述する正しい方法は、 を使用するか、次のいずれwithかです。

lock.acquire()
try:
    ...
finally:
    lock.release()

ドキュメントが呼び出しで例外が発生することを示唆しているかどうかに関係なく、常に例外に対応するようにコーディングする必要があります。将来の行動の変化を止めるものは何もありません。

于 2013-01-03T11:04:50.170 に答える