我正在写一本开源的中间Python书籍,并浏览了一些pep。在PEP310中,有一个关于“with”语句的旧建议。这个提议最终被拒绝了,但我突然想到了下面的一句话:“另一个常见的错误是在try块中编码“acquire”调用,如果acquire失败,它会错误地释放锁。”
有人能详细说明一下把习得放在尝试中是如何改变事物的吗?据我所知,Python中的acquire调用只返回一个布尔值,指示锁是否被成功获取,那么将它放在try块中如何更改呢?
最佳答案
我相信这就是它所指的:
try:
lock.acquire()
finally:
lock.release()
如果
acquire()
引发异常,将调用release()
,即使acquire()
未成功。对当前未锁定的锁调用release()
可能会引发另一个异常,即仅与问题根源间接相关的异常。写块的正确方法是使用
with
,或者:lock.acquire()
try:
...
finally:
lock.release()
无论文档是否建议调用引发异常,都应始终编写代码以满足异常。没有什么可以阻止未来行为的改变。
关于python - 在try块中获取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14137554/