Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以/明智地编写Py 2.7和;Py3.x?_Python_Python 2.7_Python 3.x - Fatal编程技术网

Python 是否可以/明智地编写Py 2.7和;Py3.x?

Python 是否可以/明智地编写Py 2.7和;Py3.x?,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我正在修改一个目前只在Python2.6/2.7下工作的库,使其在3.x下工作 下面的代码段是正确的方法吗?我特别询问第5-13和29-33行: # Example file # Deina ############################################################################### import sys ver = sys.version_info[0] if ver == 2: import Py2l

我正在修改一个目前只在Python2.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对此类项目的体系结构进行了详细介绍,解决了许多新出现的问题。

我很惊讶以前没有人(一般)问过这个问题。什么也找不到。荣誉