Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在编写一本开源的中级 Python 书籍,并阅读了许多 PEP。在PEP310中,有一个关于“with”语句的旧提案。这个提议最终被拒绝了,但下面的语句让我印象深刻:“另一个常见的错误是在 try 块中编写“获取”调用,如果获取失败,它会错误地释放锁。
有人可以详细说明将获取内容放在尝试中如何改变事情吗?据我了解,Python 中的获取调用只是返回一个布尔值,指示是否成功获取了锁,那么将它放在 try 块中会如何改变事情呢?
我相信这就是它所指的:
try: lock.acquire() finally: lock.release()
如果acquire()引发异常,release()将被调用,即使acquire()没有成功。调用release()当前未锁定的锁可能会引发另一个异常,即仅与问题根源间接相关的异常。
acquire()
release()
编写块的正确方法是使用with, 或:
with
lock.acquire() try: ... finally: lock.release()
无论文档是否建议调用引发异常,您都应该始终编写代码以应对异常。没有什么可以阻止未来行为的改变。