2

我有一些代碼,這將使requests.get()調用,這可能會以各種方式失敗。我想趕上requests例外,但不關心呼叫失敗的原因。是否有可能捕獲請求的所有異常? (通常,對於一個模塊)

我想避免像

try: 
    r = requests.get(url) 
except: 
    pass 

代碼,因爲這將有可能捕獲異常不屬於requests相關(在上面這種情況決不會是這樣,但如果有一些更多的代碼,這將是可能)。

requests例外情況是documented但我不想列出所有這些。 是否有一種方法可以捕獲它們,例如requests的某種通配符?(一般多 - 由一個模塊提供例外)

我也可以去像

try: 
    r = requests.get(url) 
except Exception as e: 
    print(e) 

,但我想避免分析e過濾掉requests例外。

注:這不是一個question on handling all but one exception的副本 - 我指定一整類有關的異常(並允許崩潰,如果別的東西拋出一個異常,這在我的情況下,將是一個錯誤)

+1

對於'request',你總是可以使用'RequestsException',從中我可以看到所有的繼承。你不能使用在同一個模塊中定義的異常(你可以趕上em全部,並在'except'子句中過濾掉所有東西,但這可能會變得混亂) –

+0

[處理所有操作,除了o ne exception](http://stackoverflow.com/questions/16123529/handling-all-but-one-exception) – Marat

+0

@Marat:這不是重複的 - 我想要捕捉整個類的相關異常,而不是「catch除了一個以外的所有東西「(我只會鏈接兩個'except實例) – WoJ

回答

2

好的圖書館設計人員通常會爲爲他們的圖書館創建一個基本例外,從而導致其他例外。

對於requests這是RequestException根據您所鏈接的documentation;在except條款中使用它將捕獲從它派生的任何內容。

try: 
    # code involving requests 
    # that might err 
except RequestException: 
    # ignore, handle.. 

正如評論和問題說明,在辨別基於他們在無法完成規定的模塊上自動(即在except子句表達式,你必須自己加入該邏輯except子句的主體