我想知道:
with open_the_socket() as s:
use s
按预期工作。我在另一个问题上读到,如果套接字的exit函数调用关闭,它将工作。据说2.7没有,但我正在使用3.4,我只是想知道。
下面是来自Python 3.4.0的socket.py:
的代码片段def __exit__(self, *args):
if not self._closed:
self.close()
因此,它关闭套接字(与Python 2.7.10相反,在套接字对象中没有__exit__方法)。
Check [Python 3.4]。文档]:数据模型-使用语句上下文管理器获取更多关于上下文管理器的详细信息。
示例测试代码:
>>> >>> import socket >>> >>> >>> s = None >>> >>> with socket.create_connection(("www.example.com", 80)) as s: ... print(s._closed) ... False >>> >>> print(s._closed) True
在Python 2上,可以使用[Python 2]强制关闭套接字(感谢@ glgll提供的提示)。文档:contextlib.closing(的事):
with contextlib.closing(open_the_socket()) as s:
print(s)
#use s