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
验证方法
- 启动Flask应用
- 访问
/swagger,应能看到生成的Swagger JSON数据 - 访问
/swagger-ui,应能正常加载Swagger UI界面
内容的提问来源于stack exchange,提问作者Graham Patrick
相关产品推荐
相关产品推荐

