python - 使用 del __builtins__.__dict__["__import__"] 删除后如何恢复 __import__
问题描述
我现在正在尝试编码挑战。我之前无法更改代码,
del __builtins__.__dict__["__import__"]
但之后必须使用导入。我需要一种方法来恢复默认值__builtins__
。它的python 2.7。
我试过__builtins__ = [x for x in (1).__class__.__base__.__subclasses__() if x.__name__ == 'catch_warnings'][0]()._module.__builtins__
了,但这不起作用,因为对内置函数的引用还没有消失,但是内置函数字典中的元素是。
解决方案
在 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
),因此imp
如果importlib
没有__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__>
>>>
推荐阅读
- c# - EF .Net Core 从控制器到达类
- c# - 如何使用 Simple Injector 调度来自中介的呼叫
- sql - 如果计数大于零则更新,否则不做任何事情
- android - 使用 Dagger 2 管理大型多库模块项目中的依赖项
- java - 如何添加 Onclick 按钮以显示 LineChart JavaFX
- r - 使用“imager”包中的 load.image() 函数在 R 中加载多个图像
- python - 无法在图像上的鼠标单击区域写入文本
- web-services - 如何将远程数据显示到离子视图中?
- c# - 从一个数组中提取正数和负数到另外两个(正数和负数)的方法
- laravel - 如何验证2次