我正在写一个单元测试断言返回值不为空,所以我写了类似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
显然我错了:(
答案 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
只有空容器,数字零和False
和None
都是假的,其他一切都是无用的;您可以使用bool()
显式测试该条件。您可以通过实施__len__()
并返回0
使自定义类型看起来像空容器,或者通过实现__nonzero__()
* 并返回{{1}看起来像一个数字当实例是数字零的布尔等价物时。
* 在Python 3中,使用__bool__
代替 。