2017-05-05 97 views
-1

後,我有一個類,如:蟒蛇退出處理異常

class TestClass(object): 
    def __init__(self, *args): 
     try: 
      ## check some condition 
     except: 
      return 
      ## Should exit class 

    def do_something_else(self): 
     ... 

    def return_something(self): 
     ## return something 

現在我試圖調用類,如:

TestClass(arg1, arg2, ..).do_something_else() 
somthing = TestClass(arg1, arg2, ..).return_something() 

當我執行的第一個命令,我的條件失敗並引發異常。 我想要的是,如果在__init__函數中發生某種異常,則不應調用do_something_method,並且控制流應該轉到第二個命令。

在第二個命令中,滿足所有條件並調用return_something函數。

我該如何做到這一點?

+1

這是聽起來像[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the- XY-問題)。你不會「退出」一堂課 - 你究竟在做什麼? –

+0

我有一個分佈式任務隊列(芹菜),在這個函數被調用。我想盡量減少celery中的錯誤日誌,並將錯誤存儲在數據庫日誌中。這就是爲什麼在初始化類時如果條件不滿足我想將錯誤詳細信息存儲在我的數據庫日誌中並退出該類。有一些方法可以返回數據,而其他方法只是處理其他數據。否則,我會從'__init__'函數調用函數。 –

回答

1

也許我錯了,但我會保持它的簡單,用一個標誌變量,做這種方式:

class TestClass(object): 
    def __init__(self, *args): 
     self.flag=False 
     try: 
      ## check some condition 
     except: 
      self.flag=True 

    def do_something_else(self): 
     if self.flag: 
      #do what you want, e.g. call a second command 
      return 
     ... 

    def return_something(self): 
     ## return something 
-1

您只需創建類的TestClass的對象,並返回「True」,從嘗試塊和「塊」以外的「False」。檢查值是True還是Flase並執行所需的功能。 創建一個對象會自動調用init方法,並根據您的條件返回true或false。檢查返回的值以決定是否執行所需的方法。

+0

目前尚不清楚你的意思。另外,'__init__'必須總是返回'None'。 –

0

我建議你來處理異常情況在一個單獨的函數,而不是在構造函數中

而不是

TestClass(arg1, arg2, ..).do_something_else() 

try: 
    obj = TestClass(arg1,arg2) 
except: 
    pass 
else: 
    obj.do_something_else() 

,並刪除在try/except語句從init方法。 此外,在初始化