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

问题描述 投票:0回答:3
if user.item.purchase.status == True:

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

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

status
具有三个有效值:Undefined、True 和 False。

python if-statement flake8
3个回答
8
投票

如果

status
是一个 boolean,那么写
expr == True
就很奇怪了,因为
True == True
True
,而
False == True
False
,我们可以简单地写成
expr
来代替。

另一方面,如果

status
本身不是 布尔,则比较将尝试检查对象 值是否等于
True
,这可能不同,但通常是这样某些对象等于
True
False
是“奇怪的”。例如
1 == True
成立,但是
1
True
不同 对象。

如果

status
可以是非布尔值,并且您想检查状态是否为 really
True
(因此不是 value 相等,而是 reference 相等),则
is可以使用 
检查,因为
exp1 is exp2
检查两个变量是否引用 相同 对象。

但是,如果您编写一个表达式作为条件,例如

if expr
,那么 Python 会评估该表达式的 truthiness。例如,非空列表的真实性是
True
,而对于空集合,通常是
False
。由于
True
False
的真实性分别是
True
False
,因此在这种情况下不需要写
== True

我认为这里的

status
可能是一个
BooleanField
,所以在这种情况下你可以写:

if user.item.purchase.status:
    # ...
    pass

3
投票

错误消息提示您使用此语法。

if user.item.purchase.status:
    #Do Stuff

你不需要提及

== True


0
投票

В своем случае я сделал так:

default_path: bool = True
присваиваем тип bool。 Далее в блоке 'if' идет проверка
 if default_path is True:
和 PEP8 больше не ругается.

© www.soinside.com 2019 - 2024. All rights reserved.