You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask集成Swagger时遇TypeError: 'dict' object is not callable报错求助

解决Flask Swagger配置中的TypeError: 'dict' object is not callable错误

报错原因

核心问题是变量名冲突:

  • 从flask_swagger导入了名为swagger的函数
  • 随后执行swagger = swagger(app),将函数名重新赋值为调用后返回的字典对象
  • 在/swagger视图函数中再次调用swagger(app)时,实际是尝试调用字典,触发TypeError

另外代码还有两个次要问题:

  • application/__init__.py存在缩进错误,且导入的蓝图与注册的蓝图名称不匹配
  • 视图直接返回字典,虽Flask会自动转换,但用jsonify更符合API规范

修复步骤

1. 修正wsgi.py的变量名冲突

删除或重命名覆盖swagger函数的行,同时改用jsonify返回标准响应:

from application import init_app
from flask_swagger_ui import get_swaggerui_blueprint
from flask_swagger import swagger
from flask import jsonify  # 新增导入

app = init_app()
# 移除此行:swagger = swagger(app) (多余且导致变量冲突)

@app.route('/swagger')
def get_swagger():
    swag = swagger(app)
    return jsonify(swag)

# Swagger UI route
SWAGGER_URL = '/swagger-ui'
API_URL = '/swagger'
swaggerui_blueprint = get_swaggerui_blueprint(
    SWAGGER_URL,
    API_URL,
    config={
        'app_name': "TAGR API"
    }
)
app.register_blueprint(swaggerui_blueprint, url_prefix=SWAGGER_URL)

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

2. 修正application/init.py的缩进与蓝图错误

from flask import Flask
from config import Config  # 确保导入你的配置类

def init_app():
    app = Flask(__name__, instance_relative_config=False)
    app.config.from_object(Config)

    with app.app_context():
        # Blueprints
        from application.users import users_blueprint
        # 修正蓝图名称,与导入的一致
        app.register_blueprint(users_blueprint)

    return app

验证方法

  1. 启动Flask应用
  2. 访问/swagger,应能看到生成的Swagger JSON数据
  3. 访问/swagger-ui,应能正常加载Swagger UI界面

内容的提问来源于stack exchange,提问作者Graham Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:40:27