Python值测试'abc'== True返回False

时间:2013-08-29 20:50:44

标签: python evaluation

我正在写一个单元测试断言返回值不为空,所以我写了类似assert(value, True)的内容,我收到错误AssertionError: '72a7090610eb11e398d40050569e0016' != True

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 'abc' == True
False

我一直以为非空字符串或> 1个整数会评估为True,也许我对PHP感到困惑。

我一直认为if 'abc'相当于if 'abc' == True显然我错了:(

2 个答案:

答案 0 :(得分:7)

'abc'不等于True,但它是真实的。这是两个不同的概念!换句话说,这不会打印'ok'

if 'abc' == True:
    print 'ok'

......但这会:

if 'abc':
    print 'ok'

答案 1 :(得分:6)

你把真善与平等混为一谈;它们不是同一件事。如果您需要与实际bool()True值进行比较,请使用False

>>> bool('abc')
True

您通常 直接与== True== False进行比较。相反,您使用条件表达式或语句:

if 'abc':
    pass

while 'def':
    pass

foo if 'abc' else bar

只有空容器,数字零和FalseNone都是假的,其他一切都是无用的;您可以使用bool()显式测试该条件。您可以通过实施__len__()并返回0使自定义类型看起来像空容器,或者通过实现__nonzero__() * 并返回{{1}看起来像一个数字当实例是数字零的布尔等价物时。

* 在Python 3中,使用__bool__代替