支持Python 2和Python 3的标准解决方案

Standard solution for supporting Python 2 and Python 3

我正在尝试编写一个向前兼容的程序,我想知道在需要不同的导入的情况下,处理这种情况的"最佳"方法是什么。

在我的具体案例中,我使用的是来自python2的ConfigParser.SafeConfigParser(),而python3中的configparser.ConfigParser()

到目前为止,我已经使它工作起来,要么使用一个try(导入时除外),要么使用一个条件化的python版本(使用sys)。两种方法都有效,但我想知道是否有推荐的解决方案(也许我还没有尝试过)。

埃塔:谢谢大家。我用了six.moves,没有问题。


使用六!它是一个python兼容模块,可以消除python3和python2之间的差异。这里提供的文档将帮助您解决此问题以及其他问题。

具体来说,你可以

1
2
3
4
5
6
7
from six.moves import configparser
import six

if six.PY2:
  ConfigParser = configparser.SafeConfigParser
else:
  ConfigParser = configparser.ConfigParser

你会很高兴去的。


这种模式相当标准:

1
2
3
4
try:
    from configparser import ConfigParser
except ImportError:
    from ConfigParser import SafeConfigParser as ConfigParser


您也可以这样做:

1
2
3
4
5
import sys
if sys.version[:1] == '2':
    from configparser import ConfigParser
else:
    from ConfigParser import SafeConfigParser as ConfigParser

在这里阅读更多。