2015-09-26 63 views
2

這是一個非常基本的設計問題。如果某些條件不滿足,我的程序需要退出。我有一個class A。下面顯示的方法main_logic具有控制指令。該方法創建了幾個實例並調用了在這些實例上定義的一些方法我正在展示一個這樣的例子,它創建對象b = CalcB(),然後調用b.run()。python退出程序的推薦方式

雖然在b.run(),我有條件地退出代碼update_valmain_logic也負責調用其他代碼。

我的問題是

  1. 它是一個可以接受的做法,從一些輔助代碼退出程序(在這種情況下CalcBupdate_val或者我應該總是返回一些錯誤代碼,做這裏面main_logic? ?
  2. 是否有更好的設計來處理這種情況呢?比如有些錯誤處理類?優雅的解決方案的任何說明,將不勝感激

    import sys 
    class Shelf: 
        def get_factor(self): 
         self.some_factor = 0.5 
         return self.some_factor 
    
    class CalcB: 
        def __init__(self): 
         self.shelf = Shelf() 
         self.ref = 1.0 
         self.area = 3.14285 
    
        def run(self): 
         print("Calculation B running") 
         some_factor = self.shelf.get_factor() 
         self.update_val(some_factor) 
    
        def update_val(self, some_factor): 
         self.value = some_factor*self.area 
         if (self.value > self.ref): 
          print("too bad.. exiting the program") 
          sys.exit() 
    
    class A: 
        def main_logic(self): 
         b = CalcB() 
         b.run() 
         # some more code follows... 
         #do_something() 
         #d = CalcD() 
         #do_something_else(d)      
    
    if __name__ == "__main__": 
        a = A() 
        a.main_logic() 
    

回答

1

爲了讓代碼可重用,它不應該強制執行調用代碼的行爲。標準的解決方案是引發一個異常,讓主程序退出該異常。

class ClassAException(Exception): 
    pass 

class ClassA (object): 
    def method: 
     if situation not in stuff_I_can_handle: 
      raise ClassAException('Cannot handle ' +repr(situation)) 

我不確定你的第二個問題。你知道如何處理的情況應該可以在那裏處理。例外情況適用於您不準備處理的情況。

+0

謝謝@tripleee和Antti。那麼你會建議創建一個自定義的異常類嗎?另外,你是否可以回答問題的第二部分......也就是說,我是否應該有一些共同的課來觀察這些問題並提出異常? – stackjs