首页 > 解决方案 > 有没有办法在删除后恢复内置函数?

问题描述

删除这样的内置函数后,我想在不重新启动解释器的情况下恢复它。

>>> 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

有没有办法在删除后恢复内置函数?

标签: pythonpython-3.xbuilt-in

解决方案


我认为 of 的使用模式与builtins您建议的不同。您通常做的是为您的目的重新绑定一个内置名称,然后使用它builtins来恢复功能:

eval = None

eval('5 + 5')
# TypeError: 'NoneType' object is not callable


import builtins


eval = builtins.eval
eval('5 + 5')
# 10

或(正如@ShadowRanger 所评论的那样),在这种特定情况下更简单:


eval = None

eval('5 + 5')
# TypeError: 'NoneType' object is not callable

del eval

eval('5 + 5')
# 10

推荐阅读