2

我正在编写一个单元测试来断言返回值不为空,所以我写了类似的东西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显然我错了:(

4

2 回答 2

7

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

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

...但这将:

if 'abc':
    print 'ok'
于 2013-08-29T20:52:34.023 回答
6

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

>>> bool('abc')
True

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

if 'abc':
    pass

while 'def':
    pass

foo if 'abc' else bar

只有空容器,数字零和FalseNone是假的,其他的都是真实的;您可以使用bool()明确地测试该条件。__len__()您可以通过实现和 return使自定义类型看起来像空容器,或者通过实现*并在实例是数字零的布尔等效项时返回0看起来像一个数字。__nonzero__()False

*在 Python 3 中,__bool__使用.

于 2013-08-29T20:52:13.920 回答