0

我构建了一个兼容 Python 2 和 3 的应用程序。为了提供这两个 Python 版本之间的兼容性,我使用了六个库

我的代码使用套接字。在 Python 3 下,可以使用with语句创建它们,但在 Python 2 下,它声称缺少__exit__属性。

六提供一次性插座有什么功能吗?如果不是,您认为在这种情况下最清楚的解决方案是什么?

4

1 回答 1

1

AFAIK(通过扫描其文档)six在这种情况下并没有做太多。在 Python 2 中,您可以使用装饰器封装socket在上下文管理器中contextmanager并提供:

from sys import version_info 
import socket

if version_info[0] == 2:
    from contextlib import contextmanager

    @contextmanager
    def sock(*args, **kwargs):
        s = socket.socket(*args, **kwargs)
        try:
            yield s
        finally:
            s.close()
else:  # Python 3
    sock = socket.socket

在这两种情况下,您都相应地使用该with语句:

with sock(socket.AF_INET, socket.SOCK_STREAM) as s:
    # use s
于 2017-09-11T10:20:08.370 回答