1

document 内の単語を検索するコードを Python で作成しました。ドキュメントは、キーとして「url」、値としてコンテンツを持つディクショナリとして保存されます。検索操作を実行する前に、ドキュメントのテキストを小文字に変換したかったのです。

def get_page(url):
    if url in cache:
        x=cache[url]
        return x.lower()
    else:
        return None

このコードを使用しました。cacheは辞書、urlはキーです。しかし、私はこのエラーが発生します...

Line 324: TypeError: Cannot call method 'tp$iter' of null

これは、結合可能な文字列用であると想定しました。

ここで、最初の行でエラーが発生します

for char in source:
    if char in splitlist:
        atsplit = True

sourcex上記の関数と同じです。

4

4 に答える 4

3

は反復可能ではないため、for char in source戻ったときにループに遭遇しないようにしてください。None を返す代わりに、関数の使用方法に応じて を返すこともできますNoneNone""get_page

あなたの仮定が真実ではないという単純なデモ

for char in "google.com".lower():
    print(char)


# python test.py
g
o
o
g
l
e
.
c
o
m
于 2012-12-25T17:25:02.730 に答える
0

Noneこの問題は、関数が反復可能ではない を返すときに発生します。
簡単な修正は次のとおりです。

def get_page(url):
    if url in cache:
        x=cache[url]
        return x.lower()
    else:
        return ""

これが機能するのは、文字列が空の文字列であっても反復可能 (0 回) であるTypeErrorためurlですcache

アイテムが見つからない場合にデフォルト値を返すcache辞書のメソッドを使用して、関数を 1 行に単純化できます。get()繰り返しますが、空の文字列を小文字にすることもできるため、これは機能します。そのためurl、見つからないという特別なケースを避けることができます。

def get_page(url):
    return cache.get(url, "").lower()
于 2012-12-25T17:43:36.843 に答える
0

ええ、キャッシュをチェックするときのミスヒットのケースです。これは、更新された関数とケースの例です。

cache = {}
x = ""

def get_page(url):
    if url in cache:
        x=cache[url]
        return x.lower()
    else:
        return ""

url = 'some KEY'
cache[url] = 'some VALUE'

print get_page(url)
x = get_page(url)

for char in x:
    print 'It works now'



print get_page('Does not exist')
x = get_page('Does not exist')

for char in x:
    print 'It works now'
于 2012-12-25T17:26:18.200 に答える
0

これはほぼ確実else:に、関数内の句get_page()がヒットしていることを意味します。結合可能な文字列があるわけではありません。それはあなたが持っているということですNone

于 2012-12-25T17:16:30.533 に答える