![](/img/trans.png)
[英]How to fix " TypeError: list indices must be integers or slices, not str. "?
[英]TypeError: list indices must be integers or slices, not str. While testing in POSTMAN
我在测试时尝试从 POSTMAN 运行 POST 方法,但我收到一些错误,我找不到任何解决方案。
这是 python 中应用程序的代码:
在这里我创建了商店列表:
stores = [
{
'name':'Mart',
'items':[{'name':'Item1','price':120}]
}
]
为主页创建端点:
@app.route('/')
def home():
return render_template('index.html')
创建用于创建新商店的端点:
# POST /store data: {name:}
@app.route('/store', methods=['POST'])
def create_store():
request_data = request.get_json()
new_store = {
'name':request_data['name'],
'items':[]
}
stores.append(new_store)
return jsonify(new_store)
创建用于获取特定商店的端点:
# GET /store/<string: name>
# 'hppt://127.0.0.1:5000/store/some_name
@app.route('/store/<string:name>')
def get_store(name):
# iterate over stores
for store in stores:
# if the store name matches, return it
if store['name'] == name:
return jsonify(store)
# if none match, return an error message
return jsonify({'ERROR': 'Store Not Found!'})
创建端点以获取所有商店
# GET /store
@app.route('/store')
def get_stores():
return jsonify({'stores':stores})
创建用于在特定商店中创建项目的端点:
# POST /store/<string: name>/item {name:, price:}
@app.route('/store/<string:name>/item',methods=['POST'])
def create_items_in_store(name):
request_data = request.get_json()
for store in stores:
if store['name'] == name:
new_item = {
'name': request_data['name'],
'price': request_data['price']
}
stores['items'].append(new_item)
return jsonify(new_item)
return jsonify({'ERROR': 'Item could not be added!'})
创建端点以从特定商店获取商品:
# GET /store/<string: name>/item
@app.route('/store/<string:name>/item')
def get_items_in_store(name):
for store in stores:
if store['name'] == name:
return jsonify({'items': store['items']})
return jsonify({'ERROR': 'Item Not Found in Store!'})
在端口上运行应用程序:5000
app.run(port=5000)
POSTMAN:
URL:'http://127.0.0.1:5000/store/Mart/item'
POST请求是:
{
"name":"peanuts",
"price": 340
}
我收到的错误是:
File "e:\Courses\Online_Practice\REST_API\01_First_REST_API\app.py", line 64, in create_items_in_store
stores['items'].append(new_item)
TypeError: list indices must be integers or slices, not str
您的代码中有错字
for store in stores:
if store['name'] == name:
new_item = {
'name': request_data['name'],
'price': request_data['price']
}
stores['items'].append(new_item)
在最后一行,您正在修改基于错误和代码的stores
,它是一个列表,而不是字典store
。 你可能想做store['items'].append(new_item)
for store in stores:
if store['name'] == name:
new_item = {
'name': request_data['name'],
'price': request_data['price']
}
stores['items'].append(new_item)
问题是stores
是所有商店的数组,它是一个字典列表。 并且名称的元素没有命名,您只能通过索引访问它们。
试试这个:
for index, store in enumerate(stores):
if store['name'] == name:
new_item = {
'name': request_data['name'],
'price': request_data['price']
}
stores[index].append(new_item)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.