【问题标题】:Error generating Swagger server (Python Flask) from Swagger editor从 Swagger 编辑器生成 Swagger 服务器(Python Flask)时出错
【发布时间】:2016-04-05 03:36:13
【问题描述】:

我使用 Swagger 编辑器手动生成了我的 Swagger 规范文件,并为 Python Flask 服务器生成了这些文件。按照自述文件我安装了 connexion,但是当我运行 python app.py 时出现错误: ValueError:需要超过 1 个值才能解压。有什么想法吗?

下面的完整堆栈跟踪:

No handlers could be found for logger "connexion.api"
Traceback (most recent call last):
  File "app.py", line 5, in <module>
    app.add_api('swagger.yaml')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/app.py", line 144, in add_api
    debug=self.debug)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/api.py", line 127, in __init__
    self.add_paths()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/api.py", line 198, in add_paths
    six.reraise(*sys.exc_info())
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/api.py", line 187, in add_paths
    self.add_operation(method, path, endpoint, path_parameters)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/api.py", line 160, in add_operation
    resolver=self.resolver)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/operation.py", line 168, in __init__
    resolution = resolver.resolve(self)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/resolver.py", line 50, in resolve
    return Resolution(self.resolve_function_from_operation_id(operation_id), operation_id)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/resolver.py", line 71, in resolve_function_from_operation_id
    return self.function_resolver(operation_id)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/connexion/utils.py", line 106, in get_function_from_name
    module_name, attr_path1 = module_name.rsplit('.', 1)
ValueError: need more than 1 value to unpack

【问题讨论】:

标签: python flask swagger connexion


【解决方案1】:

我也遇到过这个。据我所知,从 Swagger 生成的代码似乎假设您使用的是 Python 3。虽然 connexion 同时支持 Python 2.7 和 3.4+,但它确实需要在生成的 python-flask-server/ 基本目录以及内部目录中的 __init__.py 文件controllers/ 子目录适用于 Python 2.7(隐式命名空间包是在 Python 3.3 中引入的)。如果您在生成代码后创建这 2 个空文件,则一切正常。如果 Swagger 生成器想要支持 Python 2.7(因为 connexion 允许),它也只需要提供这些文件。

【讨论】:

  • 解决了这个问题,但遇到了其他问题:def some_function(p1, p2) -> str: default_controller.py 中的语法无效。 @letsgoblue 你用 Python 2.7 得到这个了吗?
  • @tw1742: 嗯,是的,也改变了——类型提示在 Python 3.5+ 中是新的,所以为了兼容 Python 2.7,只需删除该文件中的 `-> str` 和类似部分一切准备就绪。
  • 好的,应用程序现在正在运行,但没有显示任何内容,它正在返回 404。
  • 当时听起来完全是一个不同的问题。对于初学者,您可能会考虑端点在做什么、服务器在哪个端口上运行、http 请求的类型(get、post 等)以及您尝试访问的 url。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多