2016-04-25 109 views
1

我目前正在使用python请求库与使用json的外部API进行交互。 每个端点都通过(api类的)方法工作,并使用collect_data方法。请求库和http错误

但是我希望刮板在遇到http错误时继续运行(理想情况下将其输出到日志中)。
什么是为当前,当我使用http.raise_for_status它只是打破做到这一点的最好办法()

好像我应该使用try /除了以某种方式,但不知道如何最好地在这里做到这一点?

def scrape_full_address(self, house_no, postcode): 
     address_path = '/api/addresses' 
     address_url = self.api_source + address_path 
     payload = { 
      'houseNo': house_no, 
      'postcode': postcode, 
     } 
     return self.collect_data(url=address_url, method='get', payload=payload) 


def collect_data(self, url, method, payload=None): 
     if method == 'get': 
      data = None 
      params = payload 
     elif method == 'post': 
      params = None 
      data = payload 
     response = getattr(requests, method)(url=url, params=params, json=data, headers=self.headers) 
     if response.status_code == 200: 
      return response.json() 
     else: 
      return response.raise_for_status() 
+1

你能提供你得到确切的错误输出? –

+0

我得到一个HTTPerror:'raise HTTPError(http_error_msg,response = self) requests.exceptions.HTTPError:500服务器错误:URL的内部服务器错误:.....' – Yunti

+0

您应该看看Kerry Hatcher的答案。 –

回答

2

当你调用scrape_full_address()其他地方在你的代码包装在一个try语句。

欲了解更多信息,请参阅:https://wiki.python.org/moin/HandlingExceptions

try: 
    scrape_full_address(659, 31052) 
except HTTPError: 
    print "Oops! That caused an error. Try again..." 
+0

谢谢,这是一个更好的水平。我想加入到collect_data的底部,但它并不适合。 – Yunti