Python KeyError尽管我有密钥

问题描述 投票:0回答:1

即使该键存在,我也会收到一条错误消息

存储库类

def __init__(self):
    self.client = MongoClient('localhost', 27017)
    self.client.drop_database("exercise_database")  # clear everything that was before
    self.db = self.client.exercise_database  # create database
    self.exercises = self.db.exercises  # create table in the database

def get_all(self):
    return [{
        'id': str(exercise['_id']),
        'type': exercise['type'],
        'calories': exercise['calories']
    } for exercise in self.exercises.find()]

def add(self, exercise):
    exercise = {key: exercise[key] for key in exercise}
    exercise['calories'] = int(exercise['calories'])
    self.exercises.insert_one(exercise) 
    return 200

服务器级代码

def exercises():
    if request.method == 'GET':
        return jsonify(exerciseRepo.get_all())
    elif request.method == 'POST':
        print(request.form, file=sys.stderr)
        return jsonify(exerciseRepo.add(request.form))

错误:

File "server.py", line 31, in exercises
    return jsonify(exerciseRepo.add(request.form))
  File "ExercisesRepository.py", line 24, in add
    exercise['calories'] = int(exercise['calories'])
KeyError: 'calories'
127.0.0.1 - - [04/Jan/2020 22:08:40] "POST /exercises HTTP/1.1" 500 -

我检查了拼写,但似乎没问题,所以我不知道还有什么要更改的get方法有效(尝试过邮递员),但POST不起作用(也仅在邮递员中尝试过)服务器与pycharm(python)中的mongodb和Flask一起使用]

python post flask server keyerror
1个回答
0
投票

更改:

def get_all(self):
    return [{
        'id': str(exercise['_id']),
        'type': exercise['type'],
        'calories': exercise['calories']
    } for exercise in self.exercises.find()]

收件人:

def get_all(self):
    dict_to_return = {}
    for exercise in self.exercises.find():
        dict_to_return['id'] = str(exercise['_id'])
        dict_to_return['type'] = str(exercise['type'])
        try:
          dict_to_return['calories'] = str(exercise['calories'])
        except Exception as e:
          print(e)
          dict_to_return['calories'] = str(e)

    return dict_to_return 
© www.soinside.com 2019 - 2024. All rights reserved.