有几个modules that were renamed in Python 3,我正在寻找一种解决方案,使您的代码能够以两种 python风格工作。
在Python 3中,__builtin__
已重命名为builtins
。例如:
import __builtin__
#...
__builtin__.something # appearing multiple times ("something" may vary)
答案 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__
。
希望它有所帮助!