如果找不到某些内容,我有一个返回False
的函数,并返回一个数据结构,其中包含我正在查找的内容。当我将此函数返回的值分配给my_var
循环中的变量for
时,我会if my_var == False: continue
继续进行。
pychecker
不喜欢这样,并报告Comparisons with False are not necessary and may not work as expected
。
这样做的python方式是什么?
答案 0 :(得分:3)
作为表示没有结果的返回值,None
几乎总是更好。
如果您必须使用False
,请使用not my_var
。这假设非False
返回值永远不会“假”(bool()
将其转换为False
- 这就是空字符串,空集合和其他一些事情的情况。
如果对象可能是假的,但必须与False
区分开来,那么比较是必要的,你必须忽略错误(一个小的变化,my_var is False
会稍微多一点惯用的,但实际上是一样的)。但这不是一个好的情况,你应该避免它为了清晰。
重复一遍:如果可能,请使用None
并测试my_var is None
。
答案 1 :(得分:3)
通常您会返回None
而不是False
,即如果对象不匹配。然后选中if my_var == None:
,not 0
,not False
和not None
返回True
。
答案 2 :(得分:2)
如果您只是想检查一个假值:
myval = findit('something')
if not myval:
"not found"
如果您实际上可以为具有假值的“is-found”案例返回值,则不希望这样做。例如,如果找到[]
(空列表),则仍会报告“未找到”。
如果您关心它实际上是False
,请使用is
。 True
,False
和None
是单例,因此使用了身份比较运算符。
if myval is False:
"not found"
在这种情况下,您使用False
作为标记值来表示没有结果。
通常None
用作哨兵“无价值”,但是,如果没有找到值,我建议您更改函数的签名以返回None
。这与Python习惯用法和{}.get('missing-key')
等方法的行为更符合。
myval = findit('something')
if myval is None:
"not found"
如果因为可以返回任何值(甚至None
或False
)而没有可能的标记值,Python会使用异常来表示没有找到任何值。例如。 {}['missing-key']
会提出KeyError
。
答案 3 :(得分:1)
通常您只需使用not
:
if not my_var: continue
答案 4 :(得分:1)
在这方面,Python实际上比C ++更强类型化。只有真正的布尔可以是对错的。
所以my_var
必须是布尔值。因此,您只需将其检查为一个。
if not my_var:
continue