2011-06-21 24 views
1

我知道如何捕捉異常並打印他們回了短信:如何捕捉python中finally語句的消息?

class SelfDefinedException(Exception): pass 

try: 
    message = "Hello World!" 
    raise SelfDefinedException(message) 
except MyDefinedException, e: 
    print "MyDefinedException", e 

這工作好爲止。

但是,如何在'finally'子句中捕獲並打印該消息?

class SelfDefinedException(Exception): pass 

try: 
    message = "Hello World!" 
    raise SelfDefinedException(message) 
except MyDefinedException, e: 
    print "MyDefinedException", e 
finally: 
    # What goes here? So I can see what went wrong? 

從幾個答案我明白,這是不可能的。做這樣的事情可以嗎?

class SelfDefinedException(Exception): pass 

try: 
    message = "Hello World!" 
    raise SelfDefinedException(message) 
except MyDefinedException, e: 
    print "MyDefinedException", e 
except Exception, e: 
    # Hopefully catches all messages except for the one of MyDefinedException 
    print "Unexpected Exception raised:", e 
+0

你爲什麼想要?不是除外條款不夠好? –

+0

@Winston,我實施了我自己提出的異常處理,但是我想知道是否有其他異常提出,我沒有想到。看我的編輯。 – Aufwind

+1

是的,如果你想捕獲所有其他異常,只要繼續列出除了子句以外的其他異常。 [見文檔](http://docs.python.org/tutorial/errors.html#handling-exceptions) – Dirk

回答

4

finally塊中的代碼將始終被評估。檢查,看看有什麼地方出了問題catch塊

+0

我明白,在我的示例中'finally'會捕獲除'SelfDefinedException'之外的任何異常。但是,我怎樣才能在finally塊中顯示消息和'try'塊中引發的異常類型? – Aufwind

+2

@Druss,'finally'子句沒有發現任何異常。它是*總是*執行,即使在成功的情況下 – thehouse

4

按照documentation,你不能:

異常信息 執行的最終條款的過程中無法 可供程序。

最好檢查except塊。

2

在所有使用捕捉到任何:

try: 
    foo() 
except: 
    print sys.exc_info() 
    raise 

但這幾乎總是錯誤的做法。如果你沒有發生什麼樣的異常,那你就無能爲力了。如果發生這種情況,應該關閉程序並儘可能提供有關發生的事情的儘可能多的信息。

1

我需要類似的東西,但在我的情況下總是清理一些資源,當沒有發生異常。 以下解決方案示例適用於我,也應回答此問題。

caught_exception=None 
    try: 
     x = 10/0 
     #return my_function() 
    except Exception as e: 
     caught_exception = e 
    finally: 
     if caught_exception: 
     #Do stuff when exception 
     raise # re-raise exception 
     print "No exception" 
+0

你最好把'#什麼東西當例外'移除'除了'和'打印'沒有例外''到'其他' – GingerPlusPlus

+0

@GingerPlusPlus我明白你的觀點,但該構思回答了這個問題:「但是,我怎樣才能在」最終「條款中捕獲並打印該郵件?」 –