0

我目前正在为 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()在两次比较后迭代布尔值?

4

3 回答 3

2

any不迭代布尔值,any返回一个in试图迭代的布尔值。你的意思可能是这样的:

any(self.phrase in text for text in [
       story.getSubject(), story.getSummary(), story.getTitle()
  ])

 

anyTrue如果给定它的可迭代对象的任何元素评估为,则返回TrueFalse否则返回。

简单来说,上面的代码意思是

如果any其中一个是 True: ,则返回 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()
  ])
于 2013-03-25T10:09:37.237 回答
1

如错误所述,any返回一个布尔值。如果其任何参数返回 True,则返回 True。

如果您想检查该短语是否是任何值,您可能需要:

return any([self.phrase in val for val in [story.getSubject(), story.getSummary(), story.getTitle()]])
于 2013-03-25T10:10:39.053 回答
0

any()不是迭代布尔值,它返回一个布尔值。它应该这样做,请参阅文档

因此,您要做的是检查是否有任何方法或返回值getSubject, 然后尝试迭代该 True 或 False 值。getSummarygetTitle

于 2013-03-25T10:09:35.367 回答