raise Exception(...)
генерирует новый экземпляр Exception
и вызывает его. Это означает, что try ... except
в put
эффективно выбрасывает исключение, которое оно перехватило, и заменяет его новым сообщением «Ошибка при загрузке файла», поэтому вы всегда видите одно и то же сообщение.
Чистым способом справиться с этим было бы определение пользовательского подкласса Exception
(например, InvalidFormatException
) и повышение этого подкласса в parse_excel_rfi_sheet
, с двумя различными except
падежами в put
:
class InvalidFormatException(Exception):
pass
[...]
def parse_excel_rfi_sheet(file):
workbook = load_workbook(filename=file)
sheet = workbook["RFI"]
curent_module_coordinate = []
try:
....
curent_module_coordinate.append(sheet['E688'].value)
curent_module_coordinate.append(sheet['E950'].value)
if check_exel_rfi_template_structure(structure=curent_module_coordinate):
file_status = True
else:
file_status = False
except:
raise InvalidFormatException({"general_errors": ["Error during excel file parsing. Unknown module cell"]})
Ваш put
затем становится:
def put(self, request, format=None):
if 'file' not in request.data:
raise ParseError("Empty content")
f = request.data['file']
filename = f.name
if filename.endswith('.xlsx'):
try:
file = default_storage.save(filename, f)
r = parse_excel_rfi_sheet(file)
status = 200
except InvalidFormatException:
raise # pass on the exception
except:
raise Exception({"general_errors": ["Error during file upload"]})
finally:
default_storage.delete(file)
else:
status = 406
r = {"general_errors": ["Please upload only xlsx files"]}
return Response(r, status=status)
Предупреждение : как указано в комментариях к этому ответу, обратите внимание, что, хотя непосредственно не запрашивается, код OP должен быть дополнительно изменен, чтобы удалить голое предложение except:
, так как это, вероятно, не ожидаемое поведение .