2010-05-08 20 views
18

我想知道是否在Python中有一種簡單的方法來運行代碼,如果try語句成功,而不是try語句本身。那是其他或最終的命令做的(我不明白他們的文檔)?我知道我可以使用這樣的代碼:如果try語句在python中成功運行代碼

successful = False 
try: 
    #code that might fail 
    successful = True 
except: 
    #error handling if code failed 
if successful: 
    #code to run if try was successful that isn't part of try 

但我想知道是否有更短的路。

+2

使用裸「except:」是一個壞主意。除了SomeSpecificError之外,處理一個特定的異常,你知道該怎麼處理,這樣會更好。 '除了:'會捕獲所有你不會看到的異常,包括內存不足或用戶按下ctrl-C之類的東西。 – 2010-05-08 02:54:38

回答

30

你想要的「其他」:

for i in [0, 1]: 
    try: 
     print '10/%i: ' % i, 10/i 
    except: 
     print 'Uh-Oh' 
    else: 
     print 'Yay!' 
+0

耶!我終於修好了,我的代碼保持打印成功,雖然異常一直在發生,但現在我知道你可以在'exept'後面使用'else'。 – answerSeeker 2017-04-30 21:07:30

11

您正在尋找else關鍵字:

try: 
    #code that might fail 
except SomeException: 
    #error handling if code failed 
else: 
    # do this if no exception occured 
-3

你try塊應該是要執行的代碼,你除了要殺死該程序。我需要更好地理解你的對象以給出更好的答案。

在OO編程中,您想要「告訴,不要問」,所以保留try塊中應該發生的所有邏輯,然後在except塊中處理錯誤處理。

+2

我不認爲我傾向於同意這個答案。 「你的除外應該是殺死程序」對我來說特別難以吞嚥;我們有異常處理,所以我們可以處理異常。在Python中,這種情況尤其如此,在這種情況下,可以大量使用異常並完成對迭代器的迭代,這種事件99%的時間不是程序終止條件。我不會在任何地方靠近任何其他塊的解僱嘗試/除非,只有在成功後,你才能繼續做某件事。除此之外,其他方面通常有助於保持較短的嘗試塊,這非常棒。 – 2010-05-08 02:58:46

+0

你是對的。我一直在編寫過去三週的測試代碼,並從一個角度來看它,如果某些事情失敗了,我希望測試框架知道。 我仍然很難滿足對其他塊的需求,它似乎中斷了「嘗試做這件事......如果它失敗了,處理它」的流程應該不應該在事件中發生的所有事情在「嘗試做這件事」一節中沒有失敗? 現在你有這裏的邏輯,然後中斷邏輯,然後邏輯中斷後應該發生只有當中斷不會發生...... – 2010-05-09 14:20:17

相關問題