2014-02-25 36 views
-1

这里是我的函数的代码片段:走走NoneType“对象有一个空的名单上没有属性“__getitem__”

def getFriends(screen_name, user_id=0): 
    friends = [] 
    twitter = login() 
    if screen_name: 
    response = make_twitter_request(twitter.friends.ids, screen_name=screen_name, count=5000) 
    else: 
    response = make_twitter_request(twitter.friends.ids, user_id=user_id, count=5000) 
    friends += response['ids'] 
    for i in range(10): 
    cursor = response['next_cursor'] 
    if(cursor!=0): 
     response = make_twitter_request(twitter.friends.ids, screen_name=screen_name, count=5000) 
     friends += response['ids'] 
     print friends 
    return friends 

我已确认的响应不是空的朋友确实是空单,但当我试图做friends += response['ids']我得到了回溯:

Traceback (most recent call last): 
    File "hw2.py", line 75, in <module> 
    makeGraph('katyperry') 
    File "hw2.py", line 67, in makeGraph 
    myList = getFriends(None, user_id=user_id) 
    File "hw2.py", line 30, in getFriends 
    friends += response['ids'] 
TypeError: 'NoneType' object has no attribute '__getitem__' 

任何人有任何想法为什么?有什么事情真的很明显,我“米失踪

编辑:这里的响应,我已经切出的列表中的位,但是这通常就是你

{u'next_cursor_str': u'1319524982440652073', u'previous_cursor': 0, u'ids': [764777174, 201407468, 354264328, 84230267, 19777398, 822447170, 1969597074, 215511591, 1072197655, 93090464, 1895856553, 2148169409, 209708391, 441902035, 32469566, 158314798, 59013314, 90368637, 1205971568, 2218722350, 26334324, 150459410, 188553447, 606580718, 16411682, 404747151, 50127057, 433057142, 387713711, 343649316, 1066545259, 1210138951, 1178700428, 325652049, 265234804, 176538071, 1671978253, 400541768, 111718180, 2320113704, 317262708, 716735610, 2299884229, 2310952307, 278721743, 172989401, 745672010, 289403411, 569259066, 704350131, 380131462, 1353007663, 551726304, 1129951819, 1196832457, 572515555, 1699140998, 238251656, 2183313640, 2271781134, 239867327, 283216570, 2187940812, 213011297, 1876144244, 26968935, 1655642300, 272308935, 1571227472, 325651498, 998220847, 550442329, 1240472737, 24607504, 64080354, 34774807, 211151198, 265495165, 44444328, 2159461650, 186888760, 263960873, 244490281, 1470947208, 431145806, 407064130, 133880286], u'next_cursor': 1319524982440652073, u'previous_cursor_str': u'0'} 
+0

'response'为'None'; 'make_twitter_request()'做了什么? –

+0

make_twitter_request()是一个使Twitter的API调用的包装。它按预期工作,它确实返回正确的json响应。 –

+0

尝试打印出响应的类型和大小。 – Sheng

回答

2

您设置response有:

response = make_twitter_request(twitter.friends.ids, screen_name=screen_name, count=5000) 

make_twitter_request()返回None

+0

我已确认它不返回无 –

+0

@ Stupid.Fat.Cat:**唯一的方法**您可以通过'make_twitter_request()'返回'None'来获得该异常。 –

+0

正如你所看到的那样,这很令人费解,这是我在+ =之前打印出来的回应。 –

0

response必须None__getitem__是Python超载的神奇方法[](也就是说,a[1]调用a.__class__.__getitem__(1))。如果您升级到较新的3.x系列(这在某些次要方面不兼容,主要是语言的清理),您会收到此错误,因为您仍在使用2.x,所以您会收到友好的TypeError: 'NoneType' object is not subscriptable

没有什么别的该行可能会造成这个错误,所以除非make_twitter_request返回了有一个奇怪的__getitem__一些时髦类,response必须None

+0

这就是为什么我问这个问题,答案被证实不是无,实际上是一个完全有效的JSON对象,但我得到这个错误。非常令人费解。 –

相关问题