2016-12-06 71 views
1

如果我調用可能會引發ValueError或AttributeError的函數(例如foo()),並且在ValueError的情況下我想提供另一種方法(例如call bar()),那麼最佳方法是什麼?在AttributeError的情況下,我想重新引發異常?再次引發混淆

  1. 明確地重新提出一個特定的(這裏是AttributeError)異常嗎?

    try: 
        foo() # may raise ValueError or AttributeError 
    except ValueError: 
        bar() 
    except AttributeError: 
        raise 
    
  2. 或者什麼都不做(重新隱含)?

    try: 
        foo() # may raise ValueError or AttributeError 
    except ValueError: 
        bar() 
    

更新1:

什麼是寫一庫(至少我知道它會通過不同的用戶使用的模塊)的情況下,更好的方法?明確地重新提出並記錄重新提出的函數或只記錄函數(寫作它可能隱含地引發特定異常)?

+0

你」如果你隱式提高AttributeError –

+0

@VasiliSyrakis並不是真的,那將是完全相同的使用'raise' – user312016

+0

2.就好了 –

回答

0

你可以只是除了沒有重新提高的例外。在你的情況下,這是沒有必要的:

​​

再次提出將的情況下非常有用,你將不得不做一些清理或需籌集像以前一樣調用一個函數:

try: 
    foo() # may raise ValueError or AttributeError 
except ValueError: 
    bar() 

    raise