在進行前後端程式串接的時候,會遇到需要自訂一些非程式類型的錯誤(像是輸入的資料與預期的產出大小不符),而這種錯誤又需要從後端傳出此資訊給前端,就有了以下實驗用的程式碼囉
class CustomError(Exception):
pass
def test_error_message(input_data):
print(input_data)
if input_data == '1':
raise CustomError("Error from test_error_message" + input_data)
else:
return input_data
@api_view(['POST'])
def test_api(request):
request_data = json.loads(request.body)
print(request_data)
try:
if request_data['test'] == '0':
print ("TEST success")
return Response({"message":'Error from test_api'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
elif request_data['test'] == '1':
testdata = test_error_message(request_data['test'])
print(testdata)
elif request_data['test'] == '2':
testdata = test_error_message(request_data['test'])
testdata = int("abc")
print(testdata)
else:
return Response(True)
except CustomError as e:
return Response({"Custom Error message":str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
except Exception as e:
return Response({"Python Error message":str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
先用 CustomError 先定義出一種錯誤class
test_error_message是用來模擬可能會抱錯的function
test_api是DJANGO用於接收回應API的function,所以如果今天輸入的json是
{“test”:”0”},會成功回傳500錯誤,並且回應{“message”:’Error from test_api’}
{“test”:”1”},會成功回傳500錯誤,並且回應{“Custom Error message”:’Error from test_error_message1’}
{“test”:”2”},會成功回傳500錯誤,並且回應{“Python Error message”:’int甚麼型態甚麼的XD’}
會發現一樣都可以得到500錯誤,但可以藉由不同的回應內容來辨別或追蹤錯誤發生在哪,提供給前端還不錯的體驗