我正在修改当前仅在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

最佳答案

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

关于您的代码,我会在模块开始的某个地方甚至在自己的模块中创建“兼容性函数”,而不是有条件的导入(您并不需要整个模块,对吗?),并在整个代码中进行版本检查,这很难维护。

阿明·罗纳彻(Armin Ronacher)的此类项目的体系结构有一个解决的问题。

关于python - 是否有可能/明智地编写针对Py 2.7和Py 3.x的库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18909408/

10-12 19:29