2016-12-31 15 views
2

returnの変数Local variable "boolean" might be referenced before assignmentの近くでPyCharmがboolean変数を強調表示するのはなぜですか?数が素数であるかどうかをPyCharmは、ローカル変数が参照される可能性があることを警告します

このコードをチェック:

import random 
import math 
import time 
def prime_t(x): 
    print x 
    if x < 2: 
     return False 
    if x == 2: 
     return True 
    if x == 3: 
     return True 
    for i in range(2, int(math.sqrt(x))+1): 
     if x % i == 0: 
      boolean = False 
      break 
     else: 
      boolean = True 
    return boolean 
random.seed() 
how_much = input() 
start = time.time() 
for i in range(0, how_much): 
    print(prime_t(random.randint(0, 1000))) 
print time.time()-start 

私はそれがグローバル変数といくつかの問題がある可能性があります読みましたが、prime_t()で使用されるかもしれない何ものはありません。コードを実行しているときにも同様のことがありましたが、if x == 2if x == 3で排除されていると思います。

その他に何か問題がありますか?

答えて

5

PyCharmはではありません。特定のは、booleanに設定されます。あなたのコードの流れを理解するのに十分なほどスマートではないので、はを知りません。forループはいつも少なくとも(その時点までにx > 3であるため)のループがです。

代わりに、forループにバインドされた変数はとなる可能性があります。したがって、この警告は発生しません。

回避策はもちろんループの前にboolean = Falseを設定してシャットダウンするだけです。警告だけですが、IDEがあなたを助けようとしているが間違って誤解しているので無視することもできます。

+0

私は "ブール値"のデフォルト値を設定するとそれを修正することが分かっていましたが、冗長なコードを避けたいと思います。私はそれがちょうどPyCharmだとは思わなかった。手伝ってくれてありがとう! PS:コメント形式は申し訳ありませんが、ここでは新しいので、 "ブール値"のコード形式を設定する方法を知りませんでした。 – Mikeros

+0

まあ、不要なコードを減らすには、ループの前に 'boolean = True'を設定し、else部分をif文から削除します。 – Anders

関連する問題