Python bool类型的任何([class.method(),foo.bar(),etc.etc()])参数中的foo不可iterable

Python bool类型的任何([class.method(),foo.bar(),etc.etc()])参数中的foo不可iterable,python,python-2.7,Python,Python 2.7,我目前正在为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.

我目前正在为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()])
引发错误的代码段为:

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()])
我正在运行一个提供的简单测试套件,它设置变量并创建一些实例。我不知道为什么在比较两个布尔值之后,any()中的
会在布尔值上迭代。为什么在两次比较之后,
any()
会迭代布尔值?

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

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

any()
不是迭代布尔值,而是返回布尔值。它应该这样做的,请参阅


因此,您要做的是检查
getSubject
getSummary
getTitle
是否有任何方法返回一个值,然后尝试迭代该真值或假值。

any
不是迭代布尔值,
any
返回一个布尔值,
中的
尝试迭代该布尔值。你的意思可能是:

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

any
返回
True
,如果给定iterable的任何元素的计算结果为
True
,否则返回
False

简单地说,上面的代码意味着

如果其中任何一个为True,则返回True:
story.getSubject()中的self.phrase()
story.getSummary()中的self.phrase()
story.getTitle()中的self.phrase()

你可以用另一种方式写:

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

any
不是对布尔值进行迭代,
any
返回一个布尔值,
in
尝试对其进行迭代。你的意思可能是:

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

any
返回
True
,如果给定iterable的任何元素的计算结果为
True
,否则返回
False

简单地说,上面的代码意味着

如果其中任何一个为True,则返回True:
story.getSubject()中的self.phrase()
story.getSummary()中的self.phrase()
story.getTitle()中的self.phrase()

你可以用另一种方式写:

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

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

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

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

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

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

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

隐马尔可夫模型。。。我读了(简短的)pydoc,它确实显示我使用了
any
错误。但是,返回值不正确。当它应该返回True时返回False…您使用我更新的代码吗?一开始我误解了你的意图。是的,我更新了。我知道了,只是没有正确更新。我使用了
returnany(self.phrase for s in[list of stuff])
而不是
returnany(self.phrase
in s
for s in[list of stuff])
Hmm。。。我读了(简短的)pydoc,它确实显示我使用了
any
错误。但是,返回值不正确。当它应该返回True时返回False…您使用我更新的代码吗?一开始我误解了你的意图。是的,我更新了。我知道了,只是没有正确更新。我使用了
返回any(self.phrase for s in[list of stuff])
而不是
返回any(self.phrase
in s
for s in[list of stuff])
是的,谢谢。这就是我在记起
any
实际上在做什么之后使用的。是的,谢谢。在我记起
any
实际上在做什么之后,我最终使用的就是这个。