尝试追加时出现MemoryError

时间:2017-01-21 18:20:27

标签: python out-of-memory

Traceback (most recent call last):
File "C:/Python/PyCharmProject/FaceBookCrawl/FBCrawl.py", line 254, in <module>
user_info_download.get_user_info(user_id,user_info_type,u_access_token)
File "C:\Python\PyCharmProject\FaceBookCrawl\user_info_download.py", line 51, in get_user_info
user_info_data.append(user_info_item)
MemoryError

Process finished with exit code 1

python程序想获取可能的facebook帐号信息,比如我的朋友,喜欢,提供...但是运行它会引发错误:

elif info_type == "user_friends" or "user_likes":
    user_info_data.append(user_info_item)

它指向:

MemoryError

因为该语句导致{{1}}。请告诉我为什么以及如何纠正它。

2 个答案:

答案 0 :(得分:1)

看起来你有一个无限循环:

while(user_info["data"]):

user_info的新作业:

user_info = requests.get(...

所有内部if语句都不一定是真的。

同时,你继续追加这个循环中的列表:

user_info_data.append(user_info_item)

确保user_info["data"]在某个时间点确实变为假。

这是问题代码:

elif info_type == "user_friends" or "user_likes":
    user_info_data.append(user_info_item)
    if "https://graph.facebook.com" in user_info["paging"]["cursors"]["after"]:
        user_info = requests.get(user_info["paging"]["cursors"]["after"]).json()

您追加user_info_data。但如果if "https://graph.facebook.com" in user_info["paging"]["cursors"]["after"]如果为false,则会循环而不更新user_info。下一个循环将完全相同。所以你继续循环并向user_info_data添加相同的东西,直到你耗尽所有可用的内存。

答案 1 :(得分:0)

此elif声明

elif info_type == "user_friends" or info_type == "user_likes":

管理有多少项附加到违规列表。但是,elif条件将始终作为真值进行评估,并导致不需要的数据附加到列表中。

正确的代码: {{1}}

注意:这个问题是@Mike在答案中描述的问题的补充......两个问题都需要修复。