使用del __builtins __.__ dict __ [“ __ import__”]删除后如何找回__import__

时间:2019-04-11 21:21:23

标签: python python-2.7

我正在尝试编码挑战。我之前无法更改代码 del __builtins__.__dict__["__import__"],但之后必须使用import。我需要一种恢复默认__builtins__的方法。它的python 2.7。

我尝试了__builtins__ = [x for x in (1).__class__.__base__.__subclasses__() if x.__name__ == 'catch_warnings'][0]()._module.__builtins__,但由于对 buildins 的引用尚未消失,但内置字典中的元素已经消失,因此无法正常工作。

1 个答案:

答案 0 :(得分:5)

在Python 2中,您可以使用reload函数来获取__builtins__模块的新副本:

>>> del __builtins__.__dict__['__import__']
>>> reload(__builtins__)
<module '__builtin__' (built-in)>
>>> __import__
<built-in function __import__>
>>>

在Python 3中,reload函数已移至imp模块(在Python 3.4中为importlib),因此导入impimportlib如果没有__import__,就无法选择。相反,您可以使用__loader__.load_module来加载sys模块,并从builtins字典中删除sys.modules模块的已缓存但已损坏的副本,以便可以加载新的builtins模块与__loader__.load_module的副本:

>>> del __builtins__.__dict__['__import__']
>>> del __loader__.load_module('sys').modules['builtins']
>>> __builtins__ = __loader__.load_module('builtins')
>>> __import__
<built-in function __import__>
>>>