2016-11-29 4 views
0

発生した例外の種類に関係なく、プログラムを終了したいと思います。ただし、例外の種類によっては、別のエラーメッセージを記録する必要があります。どのようにコードの繰り返しを少なくしてこれを達成できますか?例外の種類に関係なく実行する

def exit_with_message(self, message): 
    self.logger.exception(message) 
    self.logger.error('Aborting') 
    sys.exit() 

をし、各例外のためにあなたが好きなメッセージを表示して関数を呼び出す:

try: 
    <code> 

except Exception1:  
    self.logger.exception('Error message 1') 
    self.logger.error('Aborting') 
    sys.exit() 
except Exception2: 
    self.logger.exception('Error message 2') 
    self.logger.error('Aborting') 
    sys.exit() 
except Exception: 
    self.logger.exception('Unexpected error') 
    self.logger.error('Aborting') 
    sys.exit() 
+0

スイッチを使用してすべてをキャッチしてください。 Pythonにそれらがあるかどうか覚えていない。私はそれがあると仮定しています。 – Carcigenicate

答えて

2
try: 
    <code> 
    err_msg = "" 
except Exception1: 
    err_msg = 'Error message 1' 
except Exception2: 
    err_msg = 'Error message 2' 
except Exception: 
    err_msg = 'Unexpected error' 

if err_msg != "": 
    self.logger.exception(err_msg) 
    self.logger.error('Aborting') 
    sys.exit() 
+0

をOPに追加するには、Exceptionブロックの順序が重要です。最も具体的な例外は常に先頭に置かなければなりません。 'Exception'が最初に来たら' Exception1'と 'Exception2'は決して使われません –

1

あなたはこのように関数を定義することができます

except Exception1:  
    self.exit_with_message('Error message 1') 
except Exception2: 
    self.exit_with_message('Error message 2') 
except Exception: 
    self.exit_with_message('Unexpected error') 
私が現在使用してコードを以下に示します
2

これはいかがですか?

try: 
    <code> 
except Exception as e: 
    errMsg = '' 
    if isinstance(e, Exception1): 
    errMsg = 'Error message 1' 
    elif isinstance(e, Exception2): 
    errMsg = 'Error message 2' 
    else: 
    errMsg = 'Unexpected error' 

    self.logger.exception(errMsg) 
    self.logger.error('Aborting') 
    sys.exit() 
関連する問題