python中的socket __exit__是否关闭



我想知道:

with open_the_socket() as s:
    use s

按预期工作。我在另一个问题上读到,如果套接字的exit函数调用关闭,它将工作。据说2.7没有,但我正在使用3.4,我只是想知道。

下面是来自Python 3.4.0socket.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

相关内容

  • 没有找到相关文章

最新更新