2

如果特定的输入变量是 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 "=="?

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

但听起来 python 开发人员认为使用is文字总是一个错误。这只是一个警告,而不是错误,所以我现在仍然很好,但是我应该切换到的非错误方法是什么?

4

2 回答 2

3

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

事实证明,警告只是在整数上,而不是在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...
于 2019-09-09T21:22:27.823 回答
0

也许比您的混合方法更清洁的是显式测试类型

>>> type(1) == bool
False
>>> type(1) == int
True
>>>
>>> type(True) == bool
True
>>> type(True) == int
False
于 2020-05-30T19:04:05.787 回答