【问题标题】:Flake8 error `E712 comparison to True should be 'if cond is True:' or 'if cond:'` in djangoFlake8错误`E712与True的比较应该是'if cond is True:'或'if cond:'在django中
【发布时间】:2018-11-22 23:56:26
【问题描述】:

我尝试在 Django 中管理 if 条件。

它工作正常,但在尝试检查 flake8 时出错 flake8 data/view.py

我的情况是这样的:

if user.item.purchase.status == True:

这里是user, item and purchase is model,状态是购买字段。 和 Status 有三个值 1)Undefine 2)True 3)False

我做错了什么?

Flake8 错误E712 comparison to True should be 'if cond is True:' or 'if cond:'

提前致谢

【问题讨论】:

  • 长话短说,if user.item.purchase.status 检查真实性,而if user.item.purchase.status is True 检查值是否正好是True。 linter 希望您决定使用其中一个。链接的答案有更多详细信息。

标签: python django python-3.x if-statement django-rest-framework


【解决方案1】:

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

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

== True不用提了

【讨论】:

    【解决方案2】:

    如果status是一个布尔值,那么写expr == True就很奇怪了,因为True == TrueTrue,而False == TrueFalse,我们可以只需写expr

    另一方面,如果status 本身不是 布尔,那么比较将尝试检查对象值是否等于True,可以不同,但​​通常有些对象等于TrueFalse 是“奇怪的”。例如1 == True 成立,但1True不同的 对象。

    如果status 可以是非布尔值,并且您想检查状态是否真的 True(所以不是 相等, 但 reference 相等),则可以使用is 检查,因为exp1 is exp2 检查两个变量是否引用了相同对象。

    如果您将表达式编写为条件,例如if expr,则 Python 会评估该表达式的真实性。例如,非空列表的真实性是True,而对于空集合,它通常是False。由于TrueFalse的真实性分别是TrueFalse,所以这种情况下不需要写== True

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

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

    【讨论】:

      【解决方案3】:

      使用“是”而不是“==”

      【讨论】:

      猜你喜欢
      • 2019-06-25
      • 2021-10-26
      • 1970-01-01
      • 2016-06-21
      • 2013-12-23
      • 2013-05-01
      • 2019-02-25
      相关资源
      最近更新 更多