TypeError:' NoneType'对象没有属性' __ getitem __'在python中

时间:2014-05-15 06:58:55

标签: python-2.7 typeerror

我正在使用代码来获取否。用于实现语义定位的特定短语的命中。

def hits(word1,word2=""):
query = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=%s"
if word2 == "":
    results = urllib.urlopen(query % word1)
else:
    results = urllib.urlopen(query % word1+" "+"AROUND(10)"+" "+word2)
json_res = json.loads(results.read())
google_hits=int(json_res['responseData']['cursor']['estimatedResultCount'])
return google_hits

但是当我给出一个包含短语的长文件时,它会在某种程度上执行但返回错误

"TypeError: 'NoneType' object has no attribute '__getitem__' "

错误是动态的,因为它有时会执行一些短语,有时则不会。我认为这是我使用的谷歌API的问题。此函数使用上面的方法计算SO。

def so(phrase):
num = hits(phrase,"excellent")
print num
den = hits(phrase,"poor")
print den
ratio = (num/ den+0.01)*0.6403669724770642
print ratio
sop = log(ratio)
return sop

任何人都有想法请帮助!!!

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码行复制错误:

None["key"]

错误告诉你其中一个级别:

json_res['responseData']['cursor']['estimatedResultCount']

is None。您需要检查收到的数据是否符合预期。例如,作为最小的变化:

try:
    google_hits=int(json_res['responseData']['cursor']['estimatedResultCount'])
except TypeError:
    print query
    print json_res
    google_hits = 0

此外,旧式%字符串格式和+字符串连接的混合应替换为str.format

query = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q={0}"
payload = "{0} AROUND(10) {1}".format(word1, word2) if word2 else word1
results = urllib.urlopen(query.format(payload))