While-loop:UnboundLocalError:赋值前引用的局部变量

时间:2016-10-12 03:39:26

标签: python python-3.x

我正在使用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为什么抱怨?

2 个答案:

答案 0 :(得分:2)

Rwhile循环中定义。如果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,所以我不确定我是否在这里得到了意图。