1

我在 python 中创建了一个代码来搜索 document 中的一个单词。文档以字典形式存储,以“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因为None它是不可迭代的。除了返回 None 之外,您还可以 return "",这取决于您如何使用该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

这几乎可以肯定意味着您的函数中的else:子句受到了打击。get_page()不是你有一个可组合的字符串;这是你有的None

于 2012-12-25T17:16:30.533 回答
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

当您的函数返回时出现问题None,这是不可迭代的。
一个简单的解决方法是:

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

这是有效的,因为一个字符串,即使是一个空的,也是TypeError迭代的(零次),因此返回一个空的作为结果可以避免url.cache

cache您可以通过使用字典的方法将函数简化为一行,该get()方法将在未找到该项目时返回默认值。同样,这很有效,因为它也可以小写空字符串,因此您可以避免特殊情况下url未找到。

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