Вы могли бы решить эту проблему с помощью вложенных try .. except
-блоков:
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
Теперь вы можете использовать __builtins__
так же, как и в предыдущих питона-версий.
Надеюсь, это поможет!
Спасибо, что решает еще больше проблем, связанных с py3. Вы можете немного улучшить ответ, включая небольшое описание этого модуля (только для других читателей). Замечание: шесть очень мало, и его легко включить в пакет, чтобы минимизировать зависимости. – sorin
Машина времени снова поражает: я просто сделал. –
Это больше не работает в шести-1.0b1. Попробуйте импортировать шесть; six.moves.builtin'. –