2016-11-29 10 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

모두 잡아서 스위치를 사용하여 발송 하시겠습니까? 파이썬에 그러한 것들이 있는지 기억할 수 없습니다. 나는 그것이 있다고 추측하고있다. – 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()