メインからクラスが生成した例外を処理する方法

私はこの状況をどのように解決するのが最善であるかについて頭を悩ませています(主に経験が不足しているためです)。 私はいくつかのタスクを実行するためにメインから呼び出される1つのクラスに2つの定義を書いています。 Mainは、多くの目的で誰でも書くことができると仮定されているので、クラス定義でコードを強制終了することは好ましくありません。これらの定義の基本的な規則の1つは、def1がタスクを正常に実行すると、def2を呼び出すことができるということです。しかし、def1が失敗した場合、def2も失敗するので、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()を実行しましたが、前述のようにプログラム全体を強制終了することは望ましくなく、例外をスローしてdef2を呼び出すかどうかを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

申し訳ありませんが、それは乱雑に見える、それは私が持っていたソリューションのためのいくつかのアイデアの組み合わせです、おそらく一緒に混在させるべきではありません。

どんな提案も素晴らしいだろう。私はいくつかの本と例外に関するフォーラムを読んだが、このシナリオをどのようにして解決するのかを把握することはできない。

ありがとう。

0

1 答え

これらのサブクラスの基本的なルールの1つは、サブクラス1がそのタスクを実行する場合   サブクラス2を呼び出すことができます。しかし、subclass1が失敗した場合、   サブクラス2も失敗するので呼び出さないでください。

3番目のクラス、またはモジュール関数を記述しますか?あるいは、2つのクラスは、本当に互いに依存している場合、独立して分解されるべきではありません。

1
追加された
申し訳ありませんブライアン、私は本当に2つのサブクラスではなく、1つのクラスで2つの定義になるはずです、私の質問を完全に台無しにしました。私はこれを修正する私の投稿を編集しました。もう一度ミックスアップして申し訳ありません。
追加された 著者 user788462,