UnboundLocalError: local variable 'p' referenced before assignment

UnboundLocalError: local variable 'p' referenced before assignment

def partial(f,h=0.0001):
    #checker
    x=y=z=1
    fx=(f(x+h,y,z)-f(x,y,z))/h
    fy=(f(x,y+h,z)-f(x,y,z))/h
    fz=(f(x,y,z+h)-f(x,y,z))/h
    if(fx==0):
        p=0
    elif(fy==0):
        q=0
    elif(fz==0):
        r=0
    fx=fy=fz=0
    a=15
    c=5
    for m in range (-a,a,c):
        for n in range (-a,a,c):
            for o in range (-a,a,c):
                x=m
                y=n
                z=o
                if(p==0):
                    x=0
                elif(q==0):
                    y=0
                elif(r==0):
                    z=0
                fx=(f(x+h,y,z)-f(x,y,z))/h
                fy=(f(x,y+h,z)-f(x,y,z))/h
                fz=(f(x,y,z+h)-f(x,y,z))/h
                arrow(pos=vector(m,n,o),axis=vector(+fx,+fy,+fz),color=color.red)
                print z
    print fx,fy,fz
    return 0

我哪里错了?我之前已经声明了p,但是它说p在赋值之前被引用了。

您可能会在 if/elif 语句的 for 循环中使用 pqr。这意味着必须定义这些,否则你 运行 有其中任何一个弹出 "UnboundLocalError: local variable '_' referenced before assignment" 错误的风险。但是,根据 fxfyfz 是什么调用函数时,您只能定义其中之一。

最简单的解决方案是添加这一行:

p = q = r = -1

在您的 if 语句上方,将其中一个设置为 0。(第 6 行左右)

现在,它们都将被定义,您可以在 for 循环中引用它们,而不管哪个被设置为 0。