django - Django API 抛出异常值:ParserError 类型的对象不是 JSON 可序列化的,没有进入 try 块
问题描述
API 开发新手。任何帮助或文章都会有帮助。我的意见.py
@api_view(["POST"])
def retrieve_base64_as_pdf(request):
try:
#base_64_input = request.POST.get('ImageBase64String')
body_unicode = request.body.decode('utf-8')
print(len(body_unicode))
body = json.loads(body_unicode)
print(len(body))
base_64_input = body['ImageBase64String']
doc_ref_id = body['DocRefID']
#base_64_input = json.loads(request.body["ImageBase64String"])
pdf = base64.b64decode(base_64_input)
#build PDF
with open(os.path.expanduser('life/lpo-test.pdf'), 'wb') as fout:
fout.write(pdf)
responses = single_page_extractor(file_names='life/lpo-test.pdf',client_doc_ref_id=doc_ref_id)
# return Response(responses, safe=False)
return Response(responses, status=status.HTTP_200_OK)
# responses = json.responses.replace("\'", '')
# return Response(responses, status=status.HTTP_200_OK, content_type='json')
except ValueError as e:
os.remove('life/lpo-test.pdf')
return Response(e, status=status.HTTP_400_BAD_REQUEST)
我的过程,1.消耗base 64运行我的逻辑并输出json。
It works 99% of the time but throws bad request at times.
1. The json input is the same for all inputs.
错误消息:异常:异常值:ParserError 类型的对象不是 JSON 可序列化的唯一错误:ParserError('错误标记数据。C 错误:第 3 行中应有 1 个字段,看到 12\n')
解决方案
如果来自 django-rest-framework看起来像Response
类,它会尝试对你提供的任何输入数据进行 json 化。
在最后一行,您尝试序列化错误对象,这就是您遇到问题的原因:
return Response(e, status=status.HTTP_400_BAD_REQUEST)
尝试将错误包装到str
json-serializable 中:
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
single_page_extractor
如果它可以返回错误对象,也可能存在问题。
推荐阅读
- javascript - HTML 表单输入等于 var = 转到 URL
- java - 使用没有 Comparable 的快速排序对 ArrayList 中的对象进行排序
- arrays - 如何在 python 3 中处理哈希表中的错误?
- jquery - 使用 jQuery 到达特定的跨度元素并检查其类
- flutter - 提供者错误:找不到正确的提供者
在此 MyApp 小部件上方 - java - 即使使用 INNER JOIN FETCH 查询,也会出现意外的 JavaAssistLazyInitializer
- python - 无法从源代码构建 qtermwidget
- r - RShiny:如何使滑块居中
- android - 尝试将 Android Gradle 项目从 Groovy 迁移到 Kotlin 时出现 CacheOpenException
- laravel - 如何在另一个表中用第三列计算两列?