Python bool类型的任何([class.method(),foo.bar(),etc.etc()])参数中的foo不可iterable
我目前正在为6.00x课程做一个习题集,遇到了一个奇怪的错误 错误是: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.
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
实际上在做什么之后,我最终使用的就是这个。