파이썬, 함수에서 발생한 에러를 함수 호출한 곳으로 넘기기
파이썬, 함수에서 발생한 에러를 함수 호출한 곳으로 넘기기
글. 수알치 오상문
[예제 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 연결을 종료합니다.