我有一个函数,如果找不到东西,它会返回False,否则会返回我想要的数据结构。当我将此函数返回的值赋给for循环中的变量my_var时,我执行了一个if my_var == False: continue来继续。
pychecker不喜欢这样,并报告了Comparisons with False are not necessary and may not work as expected。
python做这件事的方式是什么?
发布于 2013-03-06 00:41:20
作为表示没有结果的返回值,None几乎总是更好。
False,请使用not my_var。这假设非False返回值永远不会是"falsy“(bool()将其转换为False -这是空字符串、空集合和其他一些情况的情况)。False区分开来,那么比较是必要的,您必须忽略错误(一个小的变化,my_var is False会稍微更惯用一些,但它实际上是相同的)。但这并不是一个很好的情况,你应该避免它,假装清楚。重复一遍:如果可能的话,使用None并测试my_var is None。
发布于 2013-03-06 00:44:17
通常你会返回None而不是False,也就是说如果一个对象不匹配。然后选中if my_var == None:,因为所有的not 0、not False和not None都返回True。
发布于 2013-03-06 00:46:37
如果你只想检查一个错误的值:
myval = findit('something')
if not myval:
"not found"如果您实际上可以为"is-found“情况返回一个值,而这个值是错误的,那么您就不想这样做。例如,如果找到[] (空列表),这仍然会报告“找不到”。
如果您关心它实际上是False,那么可以使用is。True、False和None是单例,因此使用身份比较运算符。
if myval is False:
"not found"在本例中,您使用False作为标记值,表示没有结果。
但是,通常将None用作标记" no - value ",因此我建议您更改函数的签名,以便在没有找到值的情况下返回None。这更符合Python语言和{}.get('missing-key')等方法的行为。
myval = findit('something')
if myval is None:
"not found"在由于可以返回任何值(甚至是None或False)而不能返回标记值的情况下,Python使用异常来表示没有找到任何值。例如,{}['missing-key']将引发KeyError。
https://stackoverflow.com/questions/15229215
复制相似问题