def some_controller():
db = None
try:
db = db_connect()
some_data = some_service_func(db)
db.commit()
return some_data
except Exception as e:
db.rollback()
print('error {}'.format(e))
raise e
finally:
if db:
db.close()
@router('/test')
def app():
try:
return {'status': 200, 'message': some_controller()}
except Exception as e:
return {'status': 500, 'message': 'error {}'.format(e)}
python으로 함수를 작성 할 때, 원하는 logic을 생각대로 작성하여 실행하는 것 도 좋지만 최대한 try, except, finally를 포함하여 작성하는 것이 가장 이상적입니다. try, except, finally 3가지가 모두 포함된 함수를 가정으로 포스팅을 하도록 하겠습니다.
try 구문에는 함수의 주요 logic의 code를 작성하면 됩니다. try 구문에서 logic을 수행 중 오류가 발생하면 except 구문이 수행됩니다. 하지만 try 구문에서 오류가 발생하지 않는다면 except 구문은 수행되지 않습니다.
except구문에는 try구문에서 error가 발생할 경우 실행될 logic을 작성하면 됩니다. 대부분 except구문에는 어떠한 error가 발생했는지 확인 할 수 있는 logic을 작성합니다.
try:
...
except Exception as e:
raise e
위와 같은 except 구문이 가장 일반적이라고 볼 수 있습니다. except 발생 오류 as 오류 메시지 변수
와 같이 작성합니다. 여기에서 Exception은 python에 내장된 최상위 error code라고 생각하시면 됩니다. 그리고 Exception 문자가 길어서 as라는 method를 이용하여 e라고 짧게 변수로 선언합니다.
database를 연동한다면 error가 발생하면 rollback처리도 추가하여 error가 생긴 data를 database에 추가하지 않도록 합니다.
except구문에서 자주 보게되는 raise method는 error를 직접 발생시키는 mtehod입니다.
finally구문은 위에서 설명한 try, except 구문과 상관없이 해당 함수로 들어오면 반드시 실행되는 구문입니다. 특히 database를 사용할 경우 try구문이 성공하든 실패하든 상관없이 database를 close하는 logic을 사용합니다.