2011-11-25 26 views
0

我在解決這種情況的最佳方式方面遇到了一些麻煩(主要是由於我認爲缺乏經驗)。 我已經在一個從Main調用的類中編寫了幾個定義來執行某些任務。假設Main可以被任何人用於多種目的,所以殺死類定義中的代碼是不可取的。這些定義的一個基本規則是,如果def1成功完成任務,則可以調用def2。但是,如果def1失敗,則不能調用def2,因爲它也會失敗。如何處理從主內部生成的異常

例如半僞代碼中,並且無例外: -

# Test.py 
if __name__ == '__main__' 
    # variables imported from a file 
    var1 = a 
    var2 = b 

    class.def1(var1, var1) 
    class.def2(var_from_def1) 

最初我剛進行,不同的是一個DEF1 sys.exit():,但如前所述,造成整個節目是不可取的,這將是優選的,讓拋出異常並讓Main控制是否調用def2。

從我對異常的理解(儘管它是有限的),這不會工作,因爲異常操作需要在它被提出之前已經被定義。除非它可以在Main中定義,但我寧願Main有一個選項來做到這一點。

首選的解決方案是讓Main輸入變量,將它們傳遞給def1,如果def1失敗,並且Main沒有設置爲捕獲異常,則以下對def2的調用將被幹淨地停止(不殺死進程或顯示失敗),不知道該怎麼做,或者如果Main捕獲異常,它可以停止調用def2,加載另一組變量並再次嘗試def1。

下面是代碼的概念視圖,可以幫助瞭解我來自哪裏。

# Test.py 
if __name__ == '__main__' 
    # variables imported from file 
    var1 = a 
    var2 = b 

    while new variables to pull from file: 
     try: 
      class.def1(var1, var1) 
     except: 
      print 'def1 exception thrown' 
     else: 
      class.def2(var_from _def1) 


# class.py 
class class(object): 
    def def1(self, var1, var2): 
     try: 
      do something potentially flawed 
     except: 
      # this is where I get stuck, not sure how or if I can pass an exception back to the main to decide what to do 
      sys.stdout.write('didn't work') 
      return something 

對不起,它看起來凌亂,它的解決辦法我有,這可能不應該混在一起的一些想法的組合。

任何建議將是偉大的。我已閱讀了一些關於例外的書籍和論壇,但無法掌握如何最好地解決這種情況。

謝謝。

回答

1

這些子類的一個基本規則是,如果子類1成功執行其任務 ,則可以調用子類2。但是如果subclass1失敗, 子類2不能被調用,因爲它也會失敗。

編寫第三類,或模塊函數?或者,如果兩個類別真正相互依賴,就不應該被分解爲獨立的。

+0

對不起布萊恩,我把我的問題搞得一團糟,實際上應該是在一個類中有2個定義,而不是2個子類。我編輯了我的帖子來糾正這個問題。再次抱歉混淆。 – user788462