python-3.x While循环:未绑定本地错误:赋值前引用的局部变量

vxqlmq5t  于 2022-12-30  发布在  Python
关注(0)|答案(2)|浏览(147)

我用的是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会抱怨?

efzxgjgh

efzxgjgh1#

R是在while循环内定义的。如果while循环的条件最初不为真,则其主体永远不会执行,并且永远不会定义R。然后,尝试return R将出错。
要解决这个问题,请在进入循环之前将R初始化为某个值。
如果没有进入循环是一个错误条件,即调用者不应该传入导致问题开始的值,那么使用try/except结构捕获UnboundLocalError,并引发一个更合适的异常(例如ValueError)。

mmvthczy

mmvthczy2#

恐怕你的代码有一个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,所以我不确定我是否理解了这里的意图。

相关问题