2014-07-14 91 views
5

我是一個Java開發人員,他是Python的新手,我正在將Java類重寫爲Python類。我試圖儘可能地模仿Python類中原始類的流。 Java類有幾行,Python是否具有拋出新Exception的Java等價物(「text here」)

if(condition) 
     throw new Exception("text here") 

我一直在尋找在Python documentation for exceptions而一直沒能找到一個Python等同於Java語法。

我通過閱讀這篇StackOverflow post試過的東西(我認爲是接近)與raise Exception("text here"),但它好像這是一個tryexcept塊內使用,將導致從try塊到except塊的跳躍;我試圖避免tryexcept塊,只是拋出一個異常。

一個解決方案,我認爲可能的工作是這樣的,

try: 
     if(condition): 
      raise Exception("text here") 
    except: 
     ... 

但我想知道是否有一種方法更密切相關的Java方法,這樣我可以保持儘可能多的流盡可能(有他們看起來相似)。

+0

'raise'就像'throw'; 'try'就像'try'。你不需要*添加'try'塊來在Python中使用異常。 – Ryan

+0

Java異常完全相同:它們要麼跳到最近的合適的catch塊,要麼產生堆棧跟蹤:)嘗試說'except:pass',看看會發生什麼。 – Ashalynd

+1

請注意,您可能會派生自己的異常:https://docs.python.org/2/tutorial/errors.html#user-defined-exceptions –

回答

2

忘了嘗試,你的代碼是完全等同的,沒有它

正如其他人指出了這一點:這將引發(而沒有捕獲或處理異常):

condition = "Foo" 
if(condition is "Foo"): 
     raise Exception("FooException") 

但是,如果你想要像處理java方法一樣處理它,那麼:

正如this documentation中所解釋的那樣,你將會通過一個方法拋出它們,然後你只需要d o是嘗試方法而不是方法中的每一個條件。

#!/usr/local/bin/python2.7 

def foo(num): 
    if (num == 2): 
     raise Exception("2Exception") 
    if (num == 3): 
     raise Exception("Numception") 

def handleError(e): 
    print(e) 

def main(): 
    try: 
    foo(3) 
    print("no errors") 
    except Exception, e: 
    handleError(e) 


if __name__ == "__main__": 
    main() 
+0

這是非常明確和簡潔的,這就是爲什麼我接受它作爲答案。一個簡單的問題不是什麼大問題,當我使用你的代碼時,我的打印輸出在文本Exception('Something Happened')之後有一個奇怪的逗號,你知道爲什麼嗎? (同樣,這個答案正是我所需要的!) –

+1

@ 2g7hgfdr8324,如果你測試它[這裏](http://www.compileonline.com/execute_python_online.php),它就一定是你環境中的東西,你不會看到您在機器中出於某種原因而看到的逗號。 – Mansueli

1
if (condition):  
    raise Exception("test") 

會完成你想要的。試一試。

+0

我試過這個,但文本沒有顯示。有任何想法嗎? –

+0

它在我的情況下做了 - 看看堆棧跟蹤的結尾。如果您不想要堆棧跟蹤,則必須捕獲它或定義一個打印沒有跟蹤的錯誤消息的異常。 –

1

如果你不想捕獲異常,那麼這可能是你想要什麼:

if condition: 
    raise Exception("something bad happened!") 

如果你想捕獲異常,然後使用Python的嘗試/除非是要走的路。

5

異常處理可能是Python的一個非平凡的方面,它在語法和語義上與Java的差異最小。這真的只是raise Exception("text here")。不,它不必在字面上以try塊爲單位。和Java一樣,它傳播調用堆棧,直到遇到try塊(匹配except子句),或者如果沒有這樣的塊,它終止程序並輸出錯誤消息。

1
raise StandardError("message") 

在任何地方都是完全有效的代碼。實際上,在try/except塊中引發異常通常只會顯示案例錯誤處理。在同一個函數中引發和處理異常實際上沒有意義。

+3

「標準錯誤」在Python 3中不存在,在Python 2中非常隱晦,並且作爲大多數異常的超類(以允許捕獲「錯誤」而不捕獲「控制流異常」)而不是實例化。 「Exception」與Java更接近。 – delnan

相關問題