我目前正在为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()
在两次比较后迭代一个布尔值?
答案 0 :(得分:2)
any
没有迭代布尔值,any
返回in
尝试迭代的布尔值。你的意思可能就是:
any(self.phrase in text for text in [
story.getSubject(), story.getSummary(), story.getTitle()
])
any
会返回True
,如果给定的迭代中的任何元素的评估结果为True
和False
。
简单地说,上面的代码意味着
如果any
为真,则返回True:self.phrase in story.getSubject()
,self.phrase in story.getSummary()
或self.phrase in story.getTitle()
您可以用其他方式编写:
any([self.phrase in story.getSubject(),
self.phrase in story.getSummary(),
self.phrase in story.getTitle()
])
答案 1 :(得分:1)
正如错误所述,any
返回一个布尔值。如果其任何参数返回True,则返回True。
如果要检查短语是否为任何值,您可能需要:
return any([self.phrase in val for val in [story.getSubject(), story.getSummary(), story.getTitle()]])
答案 2 :(得分:0)
any()
不是迭代一个布尔值,它返回一个布尔值。它应该这样做,请参阅documentation。
所以你正在做的是检查方法getSubject
,getSummary
或getTitle
的任何是否返回一个值,然后你尝试迭代超过真或假值。