2016-04-25 107 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