2017-05-05 13 views
-1

を処理した後、私のようなクラスを持っている:のpython出口例外

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は呼び出されず、制御フローが2番目のコマンドに進むはずです。

2番目のコマンドでは、すべての条件が満たされ、return_something関数を呼び出す必要があります。

どうすればこの問題を解決できますか?

+1

[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the- xy-問題)。あなたはクラスを "終了"しません - あなたは実際何をしようとしていますか? –

+0

私は、この関数が呼び出される分散タスク・キュー(セロリ)を持っています。私は、セロリのエラーログを最小限に抑え、代わりにデータベースログにエラーを格納したいと考えています。そのため、条件が満たされない場合にクラスを初期化する際に、エラーログの詳細をデータベースログに保存して、クラスを終了します。データを返すメソッドと、他のデータを処理するメソッドがあります。それ以外の場合は、関数を '__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をのオブジェクトを作成してから、「真」を返すことができますtryブロックとexceptブロックからの "False"。値がTrueまたはFlaseであることを確認し、必要な機能を実行します。 オブジェクトを作成すると自動的にinitメソッドがトリガーされ、条件に基づいてtrueまたはfalseが返されます。必要なメソッドを実行するかどうかを返す値を確認してください。

+0

あなたが意味することは明確ではありません。また、 '__init__'は常に' None'を返す必要があります。 –

0

私は

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

を行う

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

代わりに別の関数ではなく、コンストラクタ内で例外条件を処理するためにあなたを示唆してそしてtry/except文を削除しますinitメソッドから。 また、return文を入れておくことは悪い習慣と考えられます