У меня есть скрипт на python, который использует try / исключением и вызывает другие функции. Я хотел бы использовать traceback для захвата трассировки стека, но также необходимо отделить последнее (или последнее) сообщение об ошибке в трассировке стека, чтобы итоговое сообщение могло быть четко отображено при возврате вызова API.
Ниже приведен пример функции. Есть несколько попыток / исключений, которые заключены в одну общую попытку за исключением. Вместо того, чтобы иметь так много возвратов, я хотел бы сжать сообщение трассировки из всех исключений и иметь только один оператор возврата.
Не уверены, возможно ли это?
def get(clean_event):
try:
if clean_event["resource"] == "xxxxxxxxxxxx":
try:
study_id = clean_event["pathParameters"]["studyid"]
except:
message = "ERROR: unable to get study id from path parameter."
return cb.return_to_caller(message=message,
stack_trace=traceback.format_exc(),
status_code=HTTP_STATUS_CODE.ERROR.value,
cors=CORSVAR)
try:
fx_name = "study.get_notes"
fx_params = [None, study_id]
return cb.common_get(clean_event['headers'],
clean_event['queryStringParameters'],
clean_event['pathParameters'], fx_name, fx_params
)
except:
message = "ERROR: unable to execute function ({}) using study_id ({}).".format(
fx_name, fx_params)
elif clean_event["resource"] == "xxxxxxxxx":
try:
note_id = clean_event["pathParameters"]["noteid"]
except:
message = "ERROR: unable to get note id from path parameter."
return cb.return_to_caller(message=message,
stack_trace=traceback.format_exc(),
status_code=HTTP_STATUS_CODE.ERROR.value,
cors=CORSVAR)
try:
fx_name = "study.get_notes"
fx_params = [note_id, None]
return cb.common_get(clean_event['headers'],
clean_event['queryStringParameters'],
clean_event['pathParameters'], fx_name, fx_params,
strip_outer_array=True
)
except:
message = "ERROR: unable to execute function ({}) using study_id ({}).".format(
fx_name, fx_params)
else:
message = "ERROR: no logic exists for resource being invoked."
return cb.return_to_caller(message=message,
stack_trace=traceback.format_exc(),
status_code=HTTP_STATUS_CODE.ERROR.value,
cors=CORSVAR)
except:
message = "ERROR: unable to execute GET. Check traceback for details."
return cb.return_to_caller(message=message,
stack_trace=traceback.format_exc(),
status_code=HTTP_STATUS_CODE.ERROR.value,
cors=CORSVAR)