Python 'dict' 对象不可调用? [复制]

Posted

技术标签:

【中文标题】Python \'dict\' 对象不可调用? [复制]【英文标题】:Python 'dict' object not callable? [duplicate]Python 'dict' 对象不可调用? [复制] 【发布时间】:2017-02-11 04:51:22 【问题描述】:

我在 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] 应用程序中的错误:异常 /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 中 响应 = self.full_dispatch_request() 文件“/mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/flask/app.py”, 第 1642 行,在 full_dispatch_request 中 响应 = self.make_response(rv) 文件“/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) 文件“/mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/werkzeug/wrappers.py ", 第 847 行,在 force_type 中 response = BaseResponse(*_run_wsgi_app(response, environ)) 文件“/mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/werkzeug/test.py”, 第 871 行,在 run_wsgi_app app_rv = app(environ, start_response) TypeError: 'dict' object is not callable

【问题讨论】:

该代码没有任何问题。您能否为您的问题添加更多细节? 我试过你的代码,它运行良好。您的代码中还有其他地方可以调用字典吗? 如果是 ajax 调用,请执行 json.dumps()。 您正在尝试调用字典,例如some_dict(),但如果没有看到导致此错误的代码(最好是minimal reproducible example),就不可能更具体。您还应该发布完整的错误消息,从 traceback 行开始。 @PM2Ring 添加了完整的错误 【参考方案1】:

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

return jsonify(user=100)

【讨论】:

嗨,当我尝试运行正确的代码时它没有返回任何输出,return jsonify(user=user_id)1 它没有返回任何东西。但是return jsonify(user='text') 返回值 @rksh 我想你推荐中的尾随 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(..)

【讨论】:

以上是关于Python 'dict' 对象不可调用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

dict对象不可调用-Python 3

为啥“模块”对象不可调用? [复制]

Python 是不是会在赋值时复制对象?

为啥从 Python 中的对象继承,在不指定父对象时更改 __dict__ 的类型不会? [复制]

Python字典创建、基本操作以及常用方法

Python之dict(或对象)与json之间转化