2016-05-06 69 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