我的代码如下:
import json
import urllib2
from urllib2 import HTTPError
def karma_reddit(user):
while True:
try:
url = "https://www.reddit.com/user/" + str(user) + ".json"
data = json.load(urllib2.urlopen(url))
except urllib2.HTTPError as err:
if err == "Too Many Requests":
continue
if err == "Not Found":
print str(user) + " isn't a valid username."
else:
raise
break
我正在尝试从reddit用户配置文件中获取数据。但是HTTP错误仍然存在。当尝试使用except语句捕获它们时,它们不断出现而程序不执行循环的另一次迭代或print语句。如何设法捕获HTTP错误?我对Python很陌生,所以这可能是一个新手的错误。谢谢!
答案 0 :(得分:1)
你需要检查err.msg
字符串,错误本身永远不会等于你,所以你总是到达其他地方:raise:
if err.msg == "Too Many Requests":
continue
if err.msg == "Not Found":
print str(user) + " isn't a valid username."
我建议使用requests和reddit,实际上会在json中返回错误代码,以便您可以使用:
import requests
def karma_reddit(user):
while True:
data = requests.get("https://www.reddit.com/user/" + str(user) + ".json").json()
if data.get("error") == 429:
print("Too many requests")
elif data.get("error") == 404:
print str(user) + " isn't a valid username."
return data
你提出所有例外情况的事实是你的429和404意味着你不需要尝试。你应该真正打破任何错误,只是向用户输出一条消息并限制请求数量。