我正在写一本开源的中间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/

10-11 06:18