【问题标题】:Distinguish 1 from True in python 3.8在 python 3.8 中区分 1 和 True
【发布时间】:2019-09-09 20:34:45
【问题描述】:

如果特定的输入变量是 1 vs True,我有一些代码我想做不同的事情。 (简而言之,是指对几个对象中的哪一个做某事,True 表示对所有对象都做这件事,但这与这个问题并不特别相关。)

目前,我使用的或多或少相当于:

if x is True:
   # Do something
elif x is 1:
   # Do something else
else:
   # More possibilities follow...

但是在 Python 3.8 中,我现在得到了

SyntaxWarning: "is" with a literal. Did you mean "=="?

嗯,不,我没有。使用== 不区分True1,因为在python 中True == 1

但听起来 python 开发人员认为将is 与文字一起使用是always a bug。这只是一个警告,而不是错误,所以我现在还可以,但是我应该切换到什么非错误的方式来做到这一点?

【问题讨论】:

  • 你试过True is x吗?
  • 我不喜欢这样的警告。这意味着您有更复杂且可能未记录的语法。规则不应说:“您可以在此处插入任何术语,除非它具有以下形式”。如果变量是可接受的,那么文字也应该是。

标签: python-3.8


【解决方案1】:

我想我明白了。 (很抱歉回答我自己的问题。)

原来警告只是在整数上,而不是在True上。写if x is True 似乎还可以,但不能写if x is 1。一旦前一种可能性消失,后者就可以安全地使用==

所以我认为正确的形式是

if x is True:
   # Do something
elif x == 1:
   # Do something else
else:
   # More possibilities follow...

【讨论】:

  • 有趣...你说过True == 1。这意味着如果你一开始就写了if x == 1:,那么当xTrue 时,它会做错事。
  • @DavidKnipe 是的。如果你先测试if x == 1,那么也会得到True,这不是我想要的。所以在这种情况下顺序很重要。
【解决方案2】:

也许比你的混合方法更干净的是显式测试类型

>>> type(1) == bool
False
>>> type(1) == int
True
>>>
>>> type(True) == bool
True
>>> type(True) == int
False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2021-11-03
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多