2017-05-19 11 views
2

サブモジュールとそのメソッドを呼び出すサブモジュールを呼び出すメインモジュールがある状況をここに示します。サブモジュールで例外が発生した場合、メインモジュールの実行を停止する方法

例:

メインモジュール:

import submodule1 
import submodule2 

var1=submodule1.test(2,0) 
var2=submodule2.verify(2,"zero") 

Submodule1:

import blah 

def test(x,y): 
    try: 
     return x/y 
    except: 
     #some code to print the error to log file 
     #some code to determine if this is a critical error 

submodule2:方法に

import blah 

def verify(x,y): 
    try: 
     return x*y 
    except: 
     #some code to print the error to log file 
     #some code to determine if this is a critical error 

次に、上記の場合、最初の呼び出し"submodule1.test(2 、0) "は、ログファイルに記録された例外をスローし、そのエラーが重大なものかどうかを判断しようとします。それが重大なエラーであれば、私は実行を停止し、すべてのファイル、conenctions、モジュールなどをクローズしたい(基本的にクリーンアップ)。

上記のコードで、コントロールはメインモジュールに戻り、実行は次の行に進みます。

私のメインモジュールには、メソッドまたはオブジェクトのインスタンス化の数がある場合があります。私はすべての単一のステートメントの条件をチェックしたくありません。

これをどのように達成することができますか?ありがとうございました!

+1

重大なエラーが発生した場合は、 'sys.exit(-1)'のような利用可能な方法の1つを使用してそれを強制終了してください。 –

+9

クリティカルであればエラーを「発生」してバブルアップさせます。最も外側の呼び出しで、(exitやリブートなどの)何かを行うための 'catch 'を持つことができます。 – scorpiodawg

+0

sys.exit()は、開いているすべてのファイル(ログファイルや入力シートのようなもの)また、私が確立しているセレンのコネクションも閉鎖されていないかもしれませんか? –

答えて

1

ここで最も良い方法は、例外をメインモジュールに伝播させることです。

try: 
    # Code 
except: 
    # Print 
    if is_critical(): 
     raise # This will re-raise the exception you just caught. 
関連する問題