福在任何地方([类方法(), 食品酒吧(), 等等等等()])bool not iterab类型的参数

2024-06-10 01:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个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()在布尔值上迭代?你知道吗


Tags: inpyselfdef错误lineany课程
3条回答

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

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

你知道吗

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

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

如果any其中的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()
  ])

在错误状态下,any返回一个布尔值。如果它的任何参数返回True,则返回True。你知道吗

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

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

any()不是对布尔值进行迭代,而是返回一个布尔值。它应该这样做,见documentation。你知道吗

因此,您要做的是检查方法getSubjectgetSummarygetTitle中的任何是否返回一个值,然后尝试迭代该真值或假值。你知道吗

相关问题 更多 >