2016-04-25 17 views
1

私は現在、jsonを使用する外部APIと対話するためにpython要求ライブラリを使用しています。 各エンドポイントは(APIクラスの)メソッドを介して動作し、collect_dataメソッドを使用します。要求ライブラリとhttpエラー

しかし、httpエラーが発生するたびに(そして理想的にはこれをログに出力する)スクレーパーを実行し続けたいと思います。
は()

それは何らかの方法以外でのI /トライを使用する必要があるように思えるが、最高の、ここでこれを行う方法がわからないなど、現在私がhttp.raise_for_statusを使用する場合、それだけで壊れるこれを行うための最善の方法は何ですか?

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

tryステートメントでコード内の別の場所にscrape_full_address()を呼び出すと、詳細情報については

は、以下を参照してください。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

関連する問題