簡體   English   中英

在try塊中獲取

[英]acquire inside a try block

我正在研究一本開源的中級Python書籍,並研究了許多PEP。 PEP310中 ,有一個關於“ with”語句的舊建議。 該提議最終被拒絕,但以下聲明使我震驚:“另一個常見的錯誤是在try塊中編寫了“ acquire”調用的代碼,如果失敗,該調用會錯誤地釋放鎖。

有人可以詳細說明如何在嘗試中添加獲取內容嗎? 據我了解,Python中的acquire調用僅返回一個布爾值,指示是否成功獲取了鎖,那么將其放入try塊中會如何改變呢?

我相信這是指的是:

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

如果acquire()引發異常,即使acquire()不成功,也會調用release() 在當前未鎖定的鎖上調用release()可能會引發另一個異常,即僅與問題根源間接相關的異常。

編寫該塊的正確方法是with或一起使用:

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

無論文檔中是否建議引發一個調用,您都應該始終編寫代碼以迎合異常。 沒有什么可以阻止將來行為的改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM