Swagger UI调用Python-Flask生成API报错:not enough values to unpack
解决Swagger Python-Flask Codegen生成API的"not enough values to unpack"错误
问题场景
通过Swagger Hub自动生成Python-Flask API服务端存根,测试POST /estimate端点时,触发以下报错:
ValueError: not enough values to unpack (expected 2, got 1)
错误根源分析
从报错栈可以定位到,错误发生在Connexion库的is_json_mimetype函数中:
maintype, subtype = mimetype.split('/') # type: str, str
代码尝试将MIME类型按/拆分为主类型和子类型,但当前传入的MIME类型是application_json(无斜杠),拆分后仅得到1个值,因此触发异常。
问题根源是Swagger YAML文件中MIME类型书写错误:将标准JSON MIME类型application/json误写为application_json,导致Swagger UI生成的请求头Content-Type也使用了错误值,后端无法正确解析。
修复步骤
1. 修正Swagger YAML文件
将YAML中所有错误的application_json替换为标准的application/json,包括主POST端点和回调部分:
修改前的YAML片段:
requestBody: content: application_json: # 错误:应为application/json schema: $ref: '#/components/schemas/EJob'
修改后的YAML片段:
requestBody: content: application/json: schema: $ref: '#/components/schemas/EJob'
同时同步修正回调部分的MIME类型:
callbacks: statusUpdate: '{$request.body#/callback_url}': post: requestBody: content: application/json: # 修正此处 schema: $ref: '#/components/schemas/EJobStatus'
2. 重新生成并部署代码
使用修正后的YAML文件在Swagger Hub重新生成Python-Flask服务端代码,替换原有代码后重启服务。
3. 验证请求
修正后,Swagger UI生成的curl请求会自动使用正确的Content-Type:
curl -X 'POST' \ 'http://localhost:8080/BLA/BLA/1.0.0/estimate' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "callback_url": "http://192.168.100.30:50/update_status", "id": 39, "script_url": "file:///data/39_script.json" }'
此时后端可正确解析MIME类型,不会再触发拆分错误,API能正常处理请求。
内容的提问来源于stack exchange,提问作者Jitendra Kulkarni
相关产品推荐
相关产品推荐

