2013-07-25 35 views
1

在Python中,如果一組ifelif條件不滿足,則會達到並執行else語句。Python:正確異常提高

如何,並提出哪種異常類型,開發人員應通知代碼中的這種點不應該達到?

實施例:

if condition1: 
    # do something 
elif condition2: 
    # do something 
else: 
    raise ShouldVeNeverGotHereException 

這是爲了確保上述if條件中的至少一個實際的計算結果爲True。如果有更好的模式來實現我所描述的,請提出建議。

回答

6

你不應該寫代碼,可能導致有始有終。但假設你必須,可能是最好的例外類型是ValueError

>>> foo = 3 
>>> if foo == 1: 
    pass 
elif foo == 2: 
    pass 
else: 
    raise ValueError('foo is unexpected value: %s' % foo) 


Traceback (most recent call last): 
    File "<pyshell#41>", line 6, in <module> 
    raise ValueError('foo is unexpected value: %s' % foo) 
ValueError: foo is unexpected value: 3 
+0

我很想聽聽對我的回答沒有幫助或錯誤,值得讚揚。這樣我可以改善我的答案! –

1

您可以使用assert

if condition1: 
    do_stuff() 
elif condition2: 
    do_stuff() 
else: 
    assert condition1 and condition2, "condition1 and condition2 is False. Do not continue" # Or something similar 
+1

斷言是傳統的你想在你的代碼* *開始做一些事情,通常它是不是你用它來檢查特定的值,而是使確保對象可以按照您期望的方式進行交互。例如,在開始創建內容的邏輯之前,使用assert來檢查指定的文件輸出路徑是否存在。在文檔中:「斷言語句是將調試斷言插入程序的一種便捷方式」。運行時錯誤值的變量不是調試問題。 –

+0

我同意@InbarRose對'assert'使用的評論。你的回答確實滿足了我所要求的「確保上述條件中至少有一項條件實際評估爲真」,但@InbarRose的答案在整個問題上一針見血。 –

+1

@JosvicZammit好的,謝謝:) – TerryA

-5

有沒有更好的方法來做到這一點。 您必須使用if,elif和else。 關於要提出的錯誤,您必須提出最不可能的錯誤,這將不會從程序的另一部分中提出。例如,如果您導入了很多庫,則不得引發ImportError,因爲如果看到ImportError,則不知道錯誤是在輸入還是在交換機中;最好的方法是使用例如ZeroDivisionError; 否則你可以創建一個特定的錯誤類。

藉口,我的英語不好,我是意大利

+3

你的英文很好,但是這是一種非常糟糕的編寫代碼的方式。您不應該使用隨機異常類型來表示您的條件開關的不同端點。例外應該意味着它是什麼。它是[*非常*](http://stackoverflow.com/a/17859124/1561176)易於定義新的異常類型。 –

+0

@InbarRose:你回到這個問題 - 不是故意的? –

+1

@Mr_and_Mrs_D嗯 - 當時我想我只是想指出如何創建自定義Exception類的其他答案中的示例。但整個事情現在看起來毫無結果。 –