【问题标题】:KeyError in Flask PythonFlask Python 中的 KeyError
【发布时间】:2021-03-22 19:46:42
【问题描述】:

您好,我在尝试 GET 或对我的 Pyhton Flask 数据执行任何操作时在“评论”中收到类型为 KeyError 的错误。

这是我的 app.py

from flask import Flask, jsonify, make_response, request

app = Flask(__name__)

businesses = [
    {
        "id" : 1,
        "name" : "Pizza Mountaint", 
        "town" : "Madrid", 
        "rating" : 5,
        "revivews" : []
    },
    {
        "id" : 2,
        "name" : "Wine Lake", 
        "town" : "London", 
        "rating" : 4,
        "revivews" : []
    },
    {
        "id" : 3,
        "name" : "Burger Town", 
        "town" : "Paris", 
        "rating" : 1,
        "revivews" : []
    },
]

@app.route("/api/v1.0/businesses", methods=["GET"])
def show_all_businesses():
    return make_response(jsonify( businesses))

@app.route("/api/v1.0/businesses/<int:id>", methods=["GET"])
def show_one_business(id):
    data_to_return = [ business for business in businesses if business["id"] == id ]
    return make_response( jsonify( data_to_return[0]), 200)

@app.route("/api/v1.0/businesses", methods=["POST"])
def add_business():
    next_id = businesses[-1]["id"] + 1
    new_business = {
        "id" : next_id,
        "name" : request.form["name"],
        "town" : request.form["town"],
        "rating" : request.form["rating"],
        "reviews" : []
    }

    businesses.append(new_business)
    return make_response( jsonify( new_business), 201)


@app.route("/api/v1.0/businesses/<int:id>", methods=["PUT"])
def edit_business(id):
    for business in businesses:
        if business["id"] == id:
            business["name"] = request.form["name"]
            business["town"] = request.form["town"]
            business["rating"] = request.form["rating"]
            break
    return make_response( jsonify( business), 200)

@app.route("/api/v1.0/businesses/<int:id>", methods=["DELETE"])
def delete_business(id):
    for business in businesses:
        if business["id"] == id:
            businesses.remove(business)
            break
    return make_response( jsonify ( {} ), 200)

@app.route("/api/v1.0/businesses/<int:id>/reviews", methods=["GET"])
def fetch_all_reviews(id):
    for business in businesses:
        if business["id"] == id:
            break
    return make_response( jsonify( business["reviews"]), 200)

@app.route("/api/v1.0/businesses/<int:id>/reviews", methods=["POST"])
def add_new_review(id):
    for business in businesses:
        if business["id"] == id:
            if len(business ["reviews"]) == 0:
                new_review_id = 1
            else:
                new_review_id = business["reviews"][-1]["id"] + 1
            new_review = {
                "id" : new_review_id,
                "username" : request.form["username"],
                "comment" : request.form["comment"],
                "stars" : request.form["stars"]
            }
            business["reviews"].append(new_review)
            break
    return make_response (jsonify(new_review), 201)

@app.route("/api/v1.0/businesses/<int:id>/reviews/<int:review_id>", methods=["GET"])
def fetch_one_review(id, review_id):
    for business in businesses:
        if business["id"] == id:
            for review in business["reviews"]:
                if review["id"] == review_id:
                    break
            break
        return make_response( jsonify ( review ), 200)




if __name__ == "__main__":
    app.run(debug = True)

这是代码,错误如下所示:Desktop\FSSD\app.py",第 76 行,在 fetch_all_reviews 返回 make_response(jsonify(business["reviews"]), 200) KeyError:“评论”

当我尝试使用浏览器上的 localhost 访问数据或仅在该地址上的邮递员中获取数据时,就会发生这种情况。

http://localhost:5000/api/v1.0/businesses/ 通过显示结果来工作,但是当我尝试点击 http://localhost:5000/api/v1.0/businesses/1/reviews 我收到KeyError in (jsonify(business["reviews"]), 200)

【问题讨论】:

    标签: python api flask postman


    【解决方案1】:

    您的businesses 列表中有错字

    businesses = [
        {
            "id" : 1,
            "name" : "Pizza Mountaint", 
            "town" : "Madrid", 
            "rating" : 5,
            "revivews" : []
        },
        {
            "id" : 2,
            "name" : "Wine Lake", 
            "town" : "London", 
            "rating" : 4,
            "revivews" : []
        },
        {
            "id" : 3,
            "name" : "Burger Town", 
            "town" : "Paris", 
            "rating" : 1,
            "revivews" : []
        },
    ]
    

    每个字典中的revivews 应该是reviews

    那么business["reviews"] 就可以正常工作了

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 1970-01-01
      • 2021-09-28
      • 2021-07-21
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多