python - 在 api 调用后无法返回我的值 - 获取 TypeError: 'dict' object is not callable
问题描述
我正在尝试从 api 获取值并使用 api 调用返回它。当我尝试调用 api 函数时,我面临 TypeError: 'dict' object is not callable。我的代码如下
import json
import requests
import datetime
import sys
from flask import Flask, request, jsonify
app = Flask(__name__)
port = '5000'
data = {
"d": {
"results": [{
"timeAccount": "031799ce7bc344a2bb65e7f05cb08c49",
"balance": "10.1388824",
"timeAccountType": "SA_AL_DLY",
"userId": "01000",
"accountClosed": "false",
"timeUnit": "DAYS"
}, {
"timeAccount": "bc4fb4d44c3e413d8137a59d121c74b6",
"balance": "25.347206",
"timeAccountType": "SA_AL_DLY",
"userId": "01000",
"accountClosed": "false",
"timeUnit": "DAYS"
}, {
"timeAccount": "f12279ea0d34471581aff90ad71d3f83",
"balance": "5.6249964",
"timeAccountType": "SA_AL_DLY",
"userId": "01000",
"accountClosed": "false",
"timeUnit": "DAYS"
}]
}
}
@app.route('/leave_balance')
def leave_balance():
Balance = 0.0
for res in data['d']["results"]:
Balance = Balance + float(res("balance"))
return jsonify(
{
"conversation": {
"memory": {
"balance1" : Balance
}
}
})
if __name__ == '__main__':
app.run(port=port)
我使用另一个 api 获取的 json 数据,我已在代码中添加为数据。当我作为正常程序单独执行休假余额功能时,它可以正常执行。但是当我作为 API 调用时,我遇到了这个错误
Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
[2020-03-25 09:32:02,490] ERROR in app: Exception on /leave_balance [GET]
Traceback (most recent call last):
File "C:\Users\Dell\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\Dell\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\Dell\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Dell\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\Dell\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\Dell\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "c:\Users\Dell\Desktop\CAI-SF\datetime.py", line 101, in leave_balance
Balance = Balance + float(res("balance"))
TypeError: 'dict' object is not callable
127.0.0.1 - - [25/Mar/2020 09:32:02] "GET /leave_balance HTTP/1.1" 500 -
请在这件事上给予我帮助
解决方案
正如@Iain Shelvington 评论中提到的,您必须在 python 字典上使用方括号,但这很容易出错,另一种方法是使用如果这样的键不存在.get()
则不会引发的方法。KeyError
例如,您的代码我将更改为:
import json
import requests
import datetime
import sys
from flask import Flask, request, jsonify
app = Flask(__name__)
port = '5003'
data = {
"d": {
"results": [{
"timeAccount": "031799ce7bc344a2bb65e7f05cb08c49",
"balance": "10.1388824",
"timeAccountType": "SA_AL_DLY",
"userId": "01000",
"accountClosed": "false",
"timeUnit": "DAYS"
}, {
"timeAccount": "bc4fb4d44c3e413d8137a59d121c74b6",
"balance": "25.347206",
"timeAccountType": "SA_AL_DLY",
"userId": "01000",
"accountClosed": "false",
"timeUnit": "DAYS"
}, {
"timeAccount": "f12279ea0d34471581aff90ad71d3f83",
"balance": "5.6249964",
"timeAccountType": "SA_AL_DLY",
"userId": "01000",
"accountClosed": "false",
"timeUnit": "DAYS"
}]
}
}
@app.route('/leave_balance')
def leave_balance():
Balance = 0.0
for res in data['d']["results"]:
b = res.get('balance', 0.0)
Balance += float(b)
return jsonify(
{
"conversation": {
"memory": {
"balance1" : Balance
}
}
})
if __name__ == '__main__':
app.run(port=port)
注意我是如何改变的:
Balance = Balance + float(res("balance"))
至:
b = res.get('balance', 0.0)
Balance += float(b)
因此,在我的示例中发生的情况是,首先,我尝试get
像这样从您的字典中获取“平衡” b = res.get('balance', 0.0)
,如果它不存在,那么我分配 a0.0
并且不会KeyError
给出。
然后我将任何b
内容转换为float
并+=
添加新的平衡Balance
,从而产生 UI:
推荐阅读
- c# - 每次我构建我的 .netcore 项目时,即使我对代码没有任何更改,也会始终生成 DLL 文件
- python - 使用 pip 安装模块后出现“ModuleNotFoundError: No module named xxxx”
- html - 如何使用 Nodejs 在 html 上显示从 sql 中的不同表中计数
- javafx - JavaFX - 获取 HBOX 的实际计算大小
- amazon-web-services - AWS EC2 部署的 .env 和 .gitignore 问题
- c# - 文档结构不同时从MongoDB读取数据
- javascript - 交换二维数组的 2 个元素
- javascript - 如何使用单选按钮和 Vue.js 更改页面颜色?
- c# - 为什么从 React 到 WebAPI 运行此 PATCH 方法时会出现 CORS 错误?
- java - Activity 第二次通过 Intent 启动时崩溃