Python' dict'对象不可调用?

时间:2016-10-03 09:22:47

标签: python flask

我在python 2.7上使用Flask,我想将一个值作为json值返回,我试图这样做,

    user_id = 100
    return_id = {}
    return_id['user'] = user_id

    return return_id

但是我收到以下错误,

这是完整的追溯,

  

127.0.0.1 - - [03 / Oct / 2016 15:04:16]" POST / add_new_patient HTTP / 1.1" 500 -   127.0.0.1 - - [03 / Oct / 2016 15:04:30]" OPTIONS / add_new_patient HTTP / 1.1" 200 - [2016-10-03 15:04:30,199] app中的错误:异常   / add_new_patient [POST] Traceback(最近一次调用最后一次):文件   " /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/flask/app.py" ;,   1988年,在wsgi_app中       response = self.full_dispatch_request()File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/flask/app.py",   第1642行,在full_dispatch_request中       response = self.make_response(rv)File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/flask/app.py" ,   第1746行,在make_response中       rv = self.response_class.force_type(rv,request.environ)File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/werkzeug/ wrappers.py&#34 ;,   第847行,在force_type中       response = BaseResponse(* _ run_wsgi_app(response,environ))File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/werkzeug/test。 PY&#34 ;,   第871行,在run_wsgi_app中       app_rv = app(environ,start_response)TypeError:' dict'对象不可调用

2 个答案:

答案 0 :(得分:6)

虽然可以使用json.dumps从Flask处理程序返回字符串,但首选方法是使用jsonify,它会添加正确的Content-Type并接受各种参数,例如你可以打电话:

return jsonify(user=100)

答案 1 :(得分:2)

  

我在python 2.7上使用Flask,我希望将值作为json值返回

您没有返回JSON字符串

您正在返回一个python对象。当Flask 看到一个python对象时,它会尝试调用它。当你返回一个字典时,它假定它是一个可调用的并试图调用它。

您需要做的是:

import json

def your_function(..):
    ...
    return json.dumps(return_id)

PS:正如@bereal在答案中正确指出的那样,上述方法不会在响应中添加Content-Type: application/json标头。您希望使用jsonify(..),如他的回答所示。