此问题在此处已有答案:
How to restore a builtin that I overwrote by accident?(3个答案)
7个月前关闭。
删除了这样的内置函数后,我想在不重新启动解释器的情况下恢复它。
>>> import builtins
>>> del builtins.eval
>>> builtins.eval = None
我尝试使用importlib
重新加载内置模块,但无法恢复eval。
>>> import importlib
>>> importlib.reload(builtins)
<module 'builtins' (built-in)>
>>> eval("5 + 5")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
我也尝试过从另一个模块中赋值一个__builtins__
变量,但效果不太好。
>>> import os
>>> __builtins__ = os.__builtins__
>>> eval()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
有没有办法在删除内置函数后恢复它?
2条答案
按热度按时间w8biq8rn1#
我认为
builtins
的使用模式和你建议的不一样,你通常做的是根据你的需要重新绑定一个内置的名字,然后使用builtins
来恢复功能:或者(正如@ShadowRanger所评论的),在这个特定的例子中甚至更简单:
soat7uwm2#
在发布问题后,我找到了一种使用BuiltinImporter恢复它的方法。