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()2つを比較した後、なぜブール値を反復するのかわかりません。any()2回比較した後、ブール値を反復処理するのはなぜですか?

4

3 に答える 3

2

anyブール値を反復処理していません。反復しようとするanyブール値を返します。inあなたはおそらくこれを意味しました:

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

 

anyTrue与えられた反復可能要素のいずれかの要素が評価されたTrue場合、またはそれ以外の場合に戻りますFalse

簡単に言えば、上記のコードは

これらのいずれかがTrueの場合、Trueを返しますanyself.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()ブール値を反復処理するのではなく、ブール値を返します。そうすることになっています。ドキュメントを参照してください。

つまり、実行しているのは、メソッドのいずれ が値を返すかどうかを確認してから、そのTrue値またはFalse値を反復処理しようとすることです。getSubjectgetSummarygetTitle

于 2013-03-25T10:09:35.367 に答える