我正在使用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
但是当我运行我的函数时,我收到以下错误:
UnboundLocalError:赋值前引用的局部变量“R”
我四处搜索,发现当函数中已分配的变量已在其外部分配时,会发生这种情况。但这不是我的函数的情况,所以我不明白Python为什么抱怨?
答案 0 :(得分:2)
R
在while
循环中定义。如果while
循环的条件最初不为真,则其主体永远不会执行,并且永远不会定义R
。然后尝试return R
是错误的。
要解决此问题,请在进入循环之前将R
初始化为某些内容。
如果没有进入循环是一个错误条件,即调用者不应该传入导致问题开始的值,那么使用UnboundLocalError
/ {{1}捕获try
}结构并提出一个更合适的例外(例如except
)。
答案 1 :(得分:0)
恐怕您的代码与 while x <= N * y:
存在无限循环。
x 的值在代码中永远不会增加。 (也许您打算改用 >=
?)
话虽如此,即使您在外面定义了 R,您仍然会得到 UnboundLocalError
。你必须告诉函数它是全局的。
R = None # init
def floatme(x,y):
global R # THIS IS THE KEY LINE
N = 1
while x >= N * y: # changed to >=
R = x - N * y
N = N+1
return R
在这一点上值得注意的是,这个函数只是在执行 x % y if x>=y else None
,所以我不确定我是否在这里得到了意图。