我正在做一个6.00x课程的习题集,遇到了一个奇怪的错误。你知道吗
错误是:
Traceback (most recent call last):
File "ps6_test.py", line 157, in test7PhraseTrigger
self.assertTrue(pt.evaluate(a), "PhraseTrigger doesn't find phrase in title")
File "/home/tayler/Dropbox/Programming/6.00x/ProblemSets/ProblemSet6/ps6.py", line 148, in evaluate
story.getTitle()])
TypeError: argument of type 'bool' is not iterable
引发错误的代码段是:
class PhraseTrigger(Trigger):
def __init__(self, phrase):
self.phrase = phrase
def evaluate(self, story):
return self.phrase in any([story.getSubject(), story.getSummary(),
story.getTitle()])
我正在运行一个提供的简单测试套件,它设置变量并创建一些实例。我不知道为什么在比较两个布尔值之后,in any()
会在布尔值上迭代。为什么在两次比较之后any()
在布尔值上迭代?你知道吗
any
不是对布尔值进行迭代,any
返回一个in
尝试对其进行迭代的布尔值。你的意思可能是:你知道吗
any
返回True
,如果给定的iterable的任何元素的计算结果为True
,否则返回False
。你知道吗简单地说,上面的代码意味着
如果
any
其中的self.phrase in story.getSubject()
、self.phrase in story.getSummary()
或self.phrase in story.getTitle()
你可以用另一种方式写:
在错误状态下,
any
返回一个布尔值。如果它的任何参数返回True,则返回True。你知道吗如果要检查短语是否为任何值,可能需要:
any()
不是对布尔值进行迭代,而是返回一个布尔值。它应该这样做,见documentation。你知道吗因此,您要做的是检查方法
getSubject
、getSummary
或getTitle
中的任何是否返回一个值,然后尝试迭代该真值或假值。你知道吗相关问题 更多 >
编程相关推荐