我正在修改一个目前只能在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
答案 0 :(得分:2)
首先,是的,它肯定是可能的,并且通常是明智的(对于开发人员和用户来说也很方便)。它通常取决于你依赖于标准库和语法的那部分在2和3之间变化的程度。我有自己的项目,运行2和3,我对它很满意。
关于你的代码,我会在模块开头的某个地方创建“兼容性功能”,甚至在他们自己的模块中而不是条件导入(你真的不需要整个模块,不是吗?)和版本检查代码,很难维护。
Armin Ronacher在这些项目的架构上有a very good blog post,它解决了许多出现的问题。