今天我遇到了一个关于内置函数 min() 的奇怪错误。 我注意到它在我的程序执行期间被重写,所以当 min() 被重写时,我开始在堆栈的每个函数中寻找 (print(min.__module__)),我得到了 UnboundLocalError:赋值前引用了局部变量“min” 我仍在调试并在提交之间来回检查是什么导致了问题。程序依赖不同模块,但模块与上次程序成功时相同。
我想知道,如何删除内置的“min”?我确信我没有用那个名字声明任何变量,即使我声明了,错误也会不同。 del min 应该恢复内置(但在我的例子中我得到了上面的错误) builtins['min'] 有效(在我尝试过的 3 个系统中的 2 个中)
知道这是怎么可能的吗?
请您参考如下方法:
一般情况下,local variable referenced before assignment的原因不是有人删除了min,而是你赋值给了一个名为的变量min 在函数的某处 after 您收到该错误的点。 (赋值也可以在 if 分支中,在错误之前,但根据我的经验,我提出的第一个场景更有可能。)
因为你已经在函数的某个地方赋值给它并且没有声明它是全局的,所以它是该函数内部的一个局部变量,并且它的所有使用都指的是那个局部变量,而不是内置函数。但是,您尚未为其分配一个值,因此 Python 不知道您希望它具有什么值。
例子:
def test():
x = min(1, 2, 3) # error message here
y = max(1, 2, 3)
# ... lots of code might go here
min = x if x < y else y # local assignment here
test()
解决方法很简单。不要那样做。为您自己的变量使用 min 以外的名称。事实上,出于这个原因,最好避免将内置函数的名称用于您自己的目的。
