PyCharm 警告局部变量可能被引用

PyCharm warns local variable might be referenced

为什么 PyCharm 用 Local variable "boolean" might be referenced before assignment 突出显示 return 附近的 boolean 变量?

此代码检查一个数是否为素数:

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.

消除

还有什么问题?

PyCharm 不确定 boolean 将被设置。它不够聪明,无法计算出您的代码流程,因此它不知道您的for循环将始终至少1次迭代(因为到那时 x > 3 为真)。

相反,它假定 for 循环中绑定的变量可能 可能 永远不会被设置,因此会引发此警告。

解决方法当然是在循环之前设置boolean = False,只是为了关闭它。这只是一个警告,您也可以忽略它,因为 IDE 试图帮助您但被误解了。

对于那些想忽略这一点的人,输入

# noinspection PyUnboundLocalVariable

线以上。

感谢:https://github.com/whitews/pc-inspection-suppression-list/blob/master/suppress-inspection.csv