2013-01-25 60 views
2

我想編寫一個函數從另一個函數報告不同的結果 有這些結果中一些例外,但我不能把它們轉換成if語句如何測試python中的if語句中的異常?

例如:

若f(x)的加薪一個ValueError,那麼我的函數返回一個字符串 「價值」,如果F(X)引發TypeError,然後我的函數返回一個字符串 「類型

但我不知道該怎麼辦這在Pytho中ñ。有人可以幫我嗎。

我的代碼是這樣的: -

def reporter(f,x):  

    if f(x) is ValueError(): 
     return 'Value' 
    elif f(x) is E2OddException(): 
     return 'E2Odd' 
    elif f(x) is E2Exception("New Yorker"): 
     return 'E2' 
    elif f(x) is None: 
     return 'no problem' 
    else: 
     return 'generic' 
+1

你爲什麼叫喊? .....嚴重的是,請不要使用全部大寫。這很難閱讀,並使我們(精神)的耳朵受傷。 – Macke

+0

我對此非常抱歉,我只是爲此而瘋狂。我的家庭作業實際上將於明天到期。 – user2010023

回答

10

try-except在Python來處理異常: -

def reporter(f,x): 
    try: 
     if f(x): 
      # f(x) is not None and not throw any exception. Your last case 
      return "Generic" 
     # f(x) is `None` 
     return "No Problem" 
    except ValueError: 
     return 'Value' 
    except TypeError: 
     return 'Type' 
    except E2OddException: 
     return 'E2Odd' 
+0

謝謝!但在我的課程中,我還沒有了解到這一點。所以也許我不能使用它。 – user2010023

+0

@ user2010023'try-except'是處理異常的唯一方法。 –

+0

啊,明白了!非常感謝! – user2010023

0

你把一個try-except你的函數調用構造像

try: 
    f(x) 
except ValueError as e: 
    return "Value" 
except E20ddException as e: 
    return "E20dd" 

函數本身沒有返回異常,異常外抓。

1
def reporter(f,x):  
    try: 
     if f(x) is None: 
      return 'no problem' 
     else: 
      return 'generic' 
    except ValueError: 
     return 'Value' 
    except E2OddException: 
     return 'E2Odd' 
    except E2Exception: 
     return 'E2'