2016-10-12 29 views
0

私はpython 3.5を使用しています。Whileループ:UnboundLocalError:割り当て前に参照されるローカル変数

xとyを正のfloat入力として受け取り、次にR = x - N * yを計算して返します。ここでNは最大の整数です。したがって、x> N * y 。

私は、この関数を作った:私の周りに検索割り当て

前に参照のローカル変数 'R':

def floatme(x,y): 

    N = 1 

    while x <= N * y: 
     R = x - N * y 
     N = N+1 

    return R 

が、私の機能を実行するときに、私は、次のエラーが表示されます

UnboundLocalError関数内の割り当てられた変数がすでにその変数の外側に割り当てられている場合に発生することがわかりました。しかし、これは私の関数の場合ではないので、なぜPythonが不平を言っているのか分かりません。

+1

Rを何かに初期化する必要があります。開始時にx> N * yが割り当てられない場合 –

答えて

2

Rは、whileループ内で定義されています。最初にwhileループの条件が真でない場合、その本体は実行されず、Rは決して定義されません。それでは、return Rを試すのは間違いです。

問題を解決するには、ループに入る前に何かにRを初期化します。

ループに入っていないことはエラー状態である場合には、呼び出し側がtry/except構造を使用してUnboundLocalErrorをキャッチし、より適切な例外を発生させ、その後、そもそもの問題を引き起こす値を渡すべきではない、すなわち、(のようなValueError)。

関連する問題