簡體   English   中英

Flask Python 中的密鑰錯誤

[英]KeyError in Flask Python

您好,我在嘗試 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", line 76, in fetch_all_reviews return make_response(jsonify(business["reviews"]), 200) KeyError: 'reviews'

當我嘗試使用瀏覽器上的 localhost 訪問數據或僅在該地址上的 postman 中獲取數據時,就會發生這種情況。

http://localhost:5000/api/v1.0/businesses/ 通過顯示結果來工作,但是當嘗試點擊 http://localhost:5000/api/v1.0/businesses/1/reviews 我收到 KeyError 時(jsonify(業務[“評論”]),200)

您的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"]會正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM