gpt4 book ai didi

python - 如何在使用 del __builtins__.__dict__ ["__import__"删除后恢复 __import__ ]

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:55 25 4
gpt4 key购买 nike

我现在正在尝试编码挑战。我之前无法更改代码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__ 但是这不起作用,因为对 builtins 的引用没有消失,但是来自 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)因此导入 impimportlib 不是没有 __import__ 的选项。相反,您可以使用 __loader__.load_module 加载 sys 模块,并从 中删除缓存但损坏的 builtins 模块副本sys.modules 字典,以便您可以使用 __loader__.load_module 加载 builtins 模块的新副本:

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

关于python - 如何在使用 del __builtins__.__dict__ ["__import__"删除后恢复 __import__ ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55641370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com