파이썬, 호출 함수에서 발생한 예외를 호출한 곳에서 처리

 

글. 수알치 오상문

 

호출 함수에서 발생한 예외를 호출한 곳에서 한꺼번에 처리하는 예제이다. func1, func2, func3, func4 함수는 예외 발생을 테스트하기 위한 함수들이다. 그리고 아래 부분에서 그 함수들을 호출하여 예외를 처리하는 구조이다.

def func1(n):    
    print(10//n)  # n이 0이면 ZeroDivisionError 예외 발생

def func2():
    n = 10  # 이 부분을 설명문 처리하면 에러 발생 
    try:
        print(n)  # n 이름이 존재하지 않으면 NameError 예외 발생
    except NameError:   
        raise NameError('Not found "n" ') 
    return True

def func3():
    v = '20'  # v = '이십'이면 ValueError 예외 발생
    print(int(v))  

def func4():
    print(10 + 20)  # (10 + '20')이면 TypeError 예외 발생 

# ---------------------------------------------------
# 호출 함수에서 발생한 예외를 받아서 한 곳에서 처리하는 예

# 에러가 발생하면 나머지 함수 호출은 무시한다. 

# 함수별로 예외를 취급하려면 try ~ except을 함수별로 분리하자.
# ---------------------------------------------------
try:
    func1(10)   # func1(0)이면 ZeroDivisionError 예외 발생 
    func2()
    func3()
    func4()
except NameError as e:
    print("NameError:", e)
except ValueError as e:
    print("ValueError:", e)
except TypeError as e:
    print("TypeError:", e)
except ZeroDivisionError as e:
    print("ZeroDivisionError:", e)     

 

[실행 결과] 예외 발생 위치에 따라서 다음과 같은 결과 메시지를 볼 수 있다.
NameError: Not found "n"

TypeError: unsupported operand type(s) for +: 'int' and 'str'

ValueError: invalid literal for int() with base 10: '이십'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

 

반응형

+ Recent posts