UnboundLocalError:赋值前引用的局部变量'p'

时间:2015-04-26 17:14:46

标签: python python-2.7 vpython

<span class="label label-success">Text</span>

我哪里错了?我之前已声明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

1 个答案:

答案 0 :(得分:0)

您可以在if / elif语句的for循环中使用pqr。这意味着必须定义这些,否则您将面临“UnboundLocalError:局部变量'_'在分配之前引用”的风险,其中任何一个都会弹出错误。但是,您只能在调用函数时定义其中一个,具体取决于fxfyfz是什么。

最简单的解决方案是添加以下行:

p = q = r = -1

在你的if语句之上

将其中一个设置为0.(第6行)

现在,它们都将被定义,您可以在for循环中引用它们,无论哪个被设置为0.