Flake8 错误:E712 与 True 的比较应该是“if cond is True:”或“if cond:”

Jus*_*ill 6 python if-statement flake8

if user.item.purchase.status == True:
Run Code Online (Sandbox Code Playgroud)

...使用 flake8 检查时产生错误:

E712 与 True 的比较应该是“if cond is True:”或“if cond:”

status具有三个有效值:未定义、True 和 False。

Wil*_*sem 8

如果 isstatus是一个布尔值,那么写起来就会很奇怪expr == True,因为True == TrueisTrueFalse == Trueis False,我们可以简单地写expr出来。

另一方面,如果某个对象本身status不是boolean,那么比较将尝试检查对象值是否等于,这可能不同但通常某些对象等于或是“奇怪的” 。例如,持有,但和是不同的对象。TrueTrueFalse1 == True1True

如果status是非布尔值,并且您想检查状态是否确实 True(因此不是相等,而是引用相等),则is可以使用检查,因为exp1 is exp2检查两个变量是否引用相同目的。

然而,如果您编写一个表达式作为条件,例如if expr,则 Python 会评估该表达式的真实性。例如,非空列表的真实性是True,而对于空集合,它通常是FalseTrue由于和的真实性分别FalseTrueFalse,因此在这种情况下不需要写== True

我认为这status可能是 a BooleanField,所以在这种情况下你可以写:

if user.item.purchase.status:
    # ...
    pass
Run Code Online (Sandbox Code Playgroud)