2013-01-22 4 views
0

다른 함수 내에서 호출되는 함수에 대한 코드가 있습니다 (리펙토링 결과).동일한 예외에 대한 여러 예외 핸들러

그래서 나는 try-catch 문을 거대한 블록으로 가지고 있습니다.

def Called(): 
    try: 
     #All statements for the function in the try block. 
    except A: 
     # Exception handler. 
    except B: 
     # Exception handler. 
    except A: 
     # Exception handler. 

문제는 동일한 유형의 두 가지 예외 (호출 된 함수의 다른 위치)를 알아야한다는 것입니다. 그러면 Calling 함수에 의해 처리됩니다.

호출 된 함수 내에서 두 개의 try-except 블록을 정의하는 것이 한 가지 방법입니다. 그러나 Calling 함수가 동일한 유형의 두 가지 예외를 다르게 처리 할 수있는 방법을 이해하지 못하고 있습니다.

+0

이 이해가되지 않습니다 ...? – ApproachingDarknessFish

+0

** 같은 유형의 두 가지 예외 **, 일부 '동일한 유형'예외의 이름? –

+0

당신은 당신의 후일을하기 위해 중첩 된 예외를 사용해야 할 것입니다. 개인적으로 나는 당신의 문제에 대해 생각하고 당신이 그 문제에 대한 또 다른 해결책을 찾길 추천합니다. –

답변

4

광고 된대로 작동하지 않습니다. 첫 번째 except A 절만 실행됩니다. 당신이 필요로하는 것은 내부에 로직을 추가로 검사하거나 (try 블록 내부의 코드가 허용하는 경우) 여러 개의 try - except 블록을 검사하는 것입니다. 이전 방식의

예 : 동일한 예외이`catch` 블록이 필요합니까 _why_

try: 
    something_that_might_fail() 
except A as e: 
    if e.is_harmless(): 
     pass 
    elif e.is_something_we_can_handle(): 
     handle_it() 
    else: 
     raise # re-raise in the hope it gets handled further up the stack 
관련 문제