2014-10-16 23 views
0

在類中繼續提高我有一個名爲「place(dictionary)」的方法,用來檢查字典中的每個對象,並在沒有異常的情況下將其添加到類變量中。 基於名爲ignore_invalid的布爾變量我想選擇繼續使用字典中下一個對象的循環,只需避免添加引發異常的對象,或者阻止循環重新引發異常。python - 除了語句調用裏面繼續還是根據結果

的代碼是這樣的:

class MyOwnException1() 
    [...] 
class MyOwnException2() 
    [...] 



[..my class definition..] 

    def place(self, elements, ignore_invalid=False): 
     for coordinates in elements: 
      try: 
       if method_checker1(coordinates): 
        raise MyOwnException1("...") 
       elif method_checker2(coordinates): 
        raise MyOwnException2("...") 
       else: 
        print "Current coordinates are valid. Adding them." 
        # adding the current coordinates 
        [..] 
      except (MyOwnException1, MyOwnException2) as my_exception: 
       print my_exception 
       if not ignore_invalid: 
        print "Stop the loop" 
        raise 
       else: 
        print "Continue the loop with next coordinates" 
        continue 

此代碼是給我的加薪行錯誤:看來我不能用「養」和「繼續」在同一個「除」。 這樣做的最好方法是什麼?

編輯:我的IDE有一個錯誤在輸出控制檯;發生異常後,如果ignore_invalid爲true,則停止重現輸出。 這裏的什麼我做了愚蠢和semplified例子(即正常運行) http://pastebin.com/FU2PVkhb

+1

你可以發佈你正在得到的確切的錯誤? – goncalopp 2014-10-16 14:32:08

+0

在'ignore_invalid'上有條件地執行method_checkers可能更有意義,而不是盲目地引發異常並稍後進行過濾 – goncalopp 2014-10-16 14:33:31

+0

無法重現您描述的行爲,並且您沒有發佈完整的回溯。 – 2014-10-16 15:32:20

回答

0

當你提高你的例外,除了塊,那麼它將停止循環。當你設置ignore_invalid = True時,循環將繼續運行。 這就是我根據你的要求瞭解的。無論如何,你需要在這裏給你的錯誤追溯。

+0

我發現了這個問題。我做的是對的;它只是一個IDE錯誤。輸出控制檯在異常打印後阻止輸出。這裏是我做了一個簡單的例子:pastebin.com/FU2PVkhb – lomiz 2014-10-16 16:12:02

0

雖然我不能重現你得到的錯誤,就可以避免這一點,並讓你避免拋出更可讀首先例外:

def place(self, elements, ignore_invalid=False): 
    for coordinates in elements: 
      if not ignore_invalid: 
       if method_checker1(coordinates): 
        raise MyOwnException1("...") 
       elif method_checker2(coordinates): 
        raise MyOwnException2("...") 
      print "Current coordinates are valid. Adding them." 
      # adding the current coordinates 
      #... 

當然,這僅僅是功能上等同,如果你的method_checkers是pure

+0

我發現了這個問題。我做的是對的;它只是一個IDE錯誤。輸出控制檯在異常打印後阻止輸出。這裏是我做了一個簡單的例子:pastebin.com/FU2PVkhb 我這樣做是因爲我需要打印異常,而且我的method_checkers不是純粹的(例如,如果其中一個是純的) – lomiz 2014-10-16 16:11:03