如何使用以交叉兼容的方式重命名3的python模块?

时间:2010-07-17 09:19:30

标签: python python-2.x python-3.x

有几个modules that were renamed in Python 3,我正在寻找一种解决方案,使您的代码能够以两种 python风格工作。

在Python 3中,__builtin__已重命名为builtins。例如:

import __builtin__
#...
__builtin__.something # appearing multiple times ("something" may vary)

2 个答案:

答案 0 :(得分:3)

本杰明彼得森的six可能正是你要找的。六个“提供简单的实用程序来包装Python 2和Python 3之间的差异”。例如:

from six.moves import builtin  # works for both python 2 and 3

答案 1 :(得分:1)

您可以使用嵌套的try .. except - blocks:

来解决问题
try:
    name = __builtins__.name
except NameError:
    try:
        name = builtins.name
    except NameError:
        name = __buildins__.name
        # if this will fail, the exception will be raised

这不是真正的代码,只是一个示例,但name将拥有与您的版本无关的正确内容。在块内,您还可以import newname as oldname或将新全局builtins中的值复制到旧__buildin__

try:
    __builtins__ = builtins
except NameError:
    try:
        __builtins__ = buildins # just for example
    except NameError:
        __builtins__ = __buildins__
        # if this will fail, the exception will be raised

现在您可以像以前的python版本一样使用__builtins__

希望它有所帮助!