0

我正在寫一個容錯HTTP客戶端請求庫,我想,以處理requests.exceptions
Python的要求異常處理不好,除了條款訂購

這裏中定義的所有異常是被內定義的例外requests.exceptions

''' 
exceptions.BaseHTTPError   exceptions.HTTPError    exceptions.ProxyError   exceptions.TooManyRedirects 
exceptions.ChunkedEncodingError exceptions.InvalidSchema   exceptions.RequestException  exceptions.URLRequired 
exceptions.ConnectionError  exceptions.InvalidURL   exceptions.SSLError    
exceptions.ContentDecodingError exceptions.MissingSchema   exceptions.Timeout 
''' 

當我使用pylint的我的申請,我越來越爲http://pylint-messages.wikidot.com/messages:e0701描述這表明順序不正確的錯誤消息。我應該捕捉錯誤的正確順序是什麼(以避免通過先捕獲通用錯誤來掩蓋更具體的錯誤),並且有沒有一種通用的方法來確定這種錯誤?

+0

你是什麼意思* 「命令」 *? – jonrsharpe

+0

這個鏈接應該解釋[Bad Order](http://pylint-messages.wikidot.com/messages:e0701)。 –

回答

0

大多數例外從RequestExceptionConnectionError繼承(其本身繼承自RequestException)。 Python會按照您在腳本中編寫的順序檢查異常。如果您想單獨查看例外情況,請首先輸入最多的例外情況,然後輸入ConnectionError並以RequestException結尾。或者,只要趕上RequestException這將抓住所有人。

0

我寫了一個裝飾將處理requests.exception.RequestException

def handle_reqexcept(func): 
    def handle(*args, **kw): 
     try: 
      return func(*args, **kw) 
     except requests.exceptions.RequestException: 
      return 
    return handle 


我寫的實際功能是:

def handle_reqexcept(func): 
    ''' 
    This decorator handles request.excptions 
    ''' 
    @wraps(func) 
    def handle(*args, **kw): 
     ''' 
     Handle RequestException 
     ''' 
     try: 
      return func(*args, **kw) 
     except requests.exceptions.RequestException as error: 
      LOGGER.log_error(error) 
    return handle 
+0

這是做什麼用的?如果我沒有弄錯,這看起來好像它抓住RequestExceptions(以及任何繼承它的異常)並默默地通過返回None(並因此丟失關於發生哪個特定異常的信息)而忽略它,這在任何情況下都不是好的做法語言。 – Foon