1

我正在修改一个目前只能在 Python 2.6/2.7 下工作的库,以使其在 3.x 下工作。

以下代码段是正确的方法吗?我特别询问第 5-13 和 29-33 行:

#  Example file
#  Deina
###############################################################################

import sys
ver = sys.version_info[0] 

if ver == 2:
        import Py2lib-1    ## wrong libs for Python 3
        import Py2lib-2
else:
        import Py3lib-1    ## wrong libs for Python 2
        import Py3lib-2


class Part(object):

        def __init__(self, parameters, payload, content_type=None):
                self.content_type = content_type
                self.parameters = parameters
                self.payload = payload
###############################################################################
#  other lines of code go here that work in either version
###############################################################################

        def render(self):
                '''Renders this part -> List of Strings'''

                parameters = ['%s="%s"' % (k, v)
                        if ver == 2:
                                for k, v in self.parameters.iteritems()]  ## Python 2.7
                        else:
                                for k, v in self.parameters.items()]  ## Python 3

###############################################################################
#  other lines of code go here that work in either version
###############################################################################

                return lines
4

1 回答 1

2

首先,是的,这当然是可能的,而且通常是明智的(对开发人员和用户来说也很方便)。这通常取决于您对标准库的那部分的依赖程度以及在 2 和 3 之间变化的语法。我有自己的项目,它同时运行 2 和 3,我对此感到非常满意。

关于你的代码,我会在模块开头的某个地方创建“兼容性函数”,甚至在他们自己的模块中而不是条件导入(你真的不需要整个模块,是吗?)和整个代码的版本检查,很难维护。

Armin Ronacher有一篇关于此类项目架构的非常好的博客文章,它解决了许多出现的问题。

于 2013-09-20T05:51:10.830 回答