我用的是python 3.5.
我试着创建一个函数,把x和y作为正浮点输入,然后计算并返回R = x-N * y,其中N是最大的整数,使得x〉N * y.
我做了这个函数:
def floatme(x,y):
N = 1
while x <= N * y:
R = x - N * y
N = N+1
return R
但是在运行函数时,我收到了以下错误:
未绑定本地错误:赋值前引用局部变量"R"
我四处寻找,发现这种情况发生在函数中的赋值变量,已经在它之外赋值了,但是我的函数不是这种情况,所以我不明白为什么Python会抱怨?
2条答案
按热度按时间efzxgjgh1#
R
是在while
循环内定义的。如果while
循环的条件最初不为真,则其主体永远不会执行,并且永远不会定义R
。然后,尝试return R
将出错。要解决这个问题,请在进入循环之前将
R
初始化为某个值。如果没有进入循环是一个错误条件,即调用者不应该传入导致问题开始的值,那么使用
try
/except
结构捕获UnboundLocalError
,并引发一个更合适的异常(例如ValueError
)。mmvthczy2#
恐怕你的代码有一个
while x <= N * y:
的无限循环。x的值在代码中永远不会增加(也许您想使用
>=
来代替?)也就是说,即使你在外部定义R,你仍然会得到
UnboundLocalError
,你必须告诉函数它是全局的。在这一点上,值得注意的是,这个函数只是在执行
x % y if x>=y else None
,所以我不确定我是否理解了这里的意图。