我想创建一个应该与Python 2.7和Python 3.3兼容的包。 逻辑应该只存在一次。
你通常如何代表编程逻辑 - 在Python 2.7或Python 3.3中? 或者你选择不同的方式?
编辑:如何在核心中处理此问题?
答案 0 :(得分:1)
我倾向于使用一些__future__
导入(可能在Python 3中被安全地忽略),以及偶然try except
用于某些导入语句。另外,我为basestring / str
兼容性定义了一个字符串类型。仅仅取决于我对每个模块的需求。
例如:
from __future__ import absolute_import
from __future__ import unicode_literals
from __future__ import division
from __future__ import print_function
try:
import ConfigParser as cfgparser
except ImportError:
import configparser as cfgparser
try:
stringtype = basestring
except NameError:
stringtype = str
我认为six包已经这样做了,所以这可能是另一个不错的选择。
答案 1 :(得分:1)
你只需要使用相同语言的那些位,并在其他部分中处理条件或异常处理即可。
这更难或更容易,具体取决于您的软件功能以及您需要支持的Python版本。通过支持Python 2.6,2.7和3.3,它变得相对简单。
我建议你查看这本书:http://python3porting.com/,特别是“支持Python 2和3没有2to3转换”一章和附录,其中包含大量如何解决大多数不兼容问题的例子。
six库也可能有用。