파이썬, 함수에서 발생한 에러를 함수 호출한 곳으로 넘기기

글. 수알치 오상문


[예제 1]


def func(name = None):
    try:
        if name is None or name == '':
            raise NameError('name error')  # 강제 예외 발생 (try에서 처리됨)
    except Exception as e:
        # print('Error:', e)
        raise e  # 강제 예외 발생 (함수 호출한 곳으로 에러 전달됨)
    else:
        print('Hello,', name)
        return 'OK'

try:
    print(func())  # func 함수 호출 및 예외 처리    
except NameError as e:
    print('NameError:', e)    
except Exception as e:
    print('Error:', e)

try:
    print(func('sualchi'))  # func 함수 호출 및 예외 처리    
except NameError as e:
    print('NameError:', e)    
except Exception as e:
    print('Error:', e)


[실행 결과]
NameError: name error
Hello, sualchi


[예제 2] 


def db_connection():
    raise ConnectionError
    return '디비연결객체'

conn = None

try:
    try:
        conn = db_connection()  # db 연결 함수 호출 및 예외 처리 
    except ConnectionError as e:  # DB 컨넥션 에러 처리 
        # 바깥 위치로 에러를 전달 
        raise RuntimeError('database connetcion error') from e
    except Exception as e:  # 기타 에러 처리 
        print('Error:', e)
except RuntimeError as e:    
    print('RuntimeError:', e)
    print('DB 연결에 실패했습니다.')
else:
    print('DB 연결에 성공했습니다.')
    print('DB 작업을 진행합니다.')
finally:
    if conn is not None:
        print('DB 연결을 종료합니다.')

[실행 결과]
RuntimeError: database connetcion error
DB 연결에 실패했습니다.

또는

DB 연결에 성공했습니다.
DB 작업을 진행합니다.
DB 연결을 종료합니다.


반응형

+ Recent posts