2016-05-06 70 views
0

我的代码如下:蟒蛇没抓HTTPError

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的用户配置文件中的数据。但是HTTPErrors持续发生。当试图使用except语句来捕捉它们时,它们会继续出现,而程序不会执行循环或打印语句的另一个迭代。我如何设法捕捉HTTPErrors?我对Python很新,所以这可能是一个新手的错误。谢谢!

回答

1

您需要检查err.msg的字符串,犯错本身决不等于或者让你随时到达否则:加薪:

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的意味着你不需要一试。你应该真的打破任何错误,只是向用户输出一条消息,并限制请求的数量。

+1

感谢Padraic工作! – cpat