⚠️ 에러
플라스크 서버에서 GET 요청을 처리하는 과정에서 500 에러가 발생했다.
125.143.73.99 - - [08/Feb/2025 19:40:28] "GET /memos HTTP/1.1" 500 -
Traceback (most recent call last):
...
File "/home/ubuntu/jungle/app.py", line 31, in read_memos
memo['likes'] = int(memo['likes'])
^^^^^^^^^^^^^^
KeyError: 'likes'
✅ 해결 과정
KeyError는 dictionary에 없는 key에 접근할 때 발생하는 에러이다.
dictionary를 dic = {'a':1, 'b':2}로 정의했는데 dic['c']에 접근한다면 키값이 없으므로 KeyError가 발생한다.
@app.route('/memos', methods=['GET'])
def read_memos():
# mongoDB에서 모든 데이터 조회해오기 (Read)
memos = list(db.memos.find({}, {'_id':True, 'title':True, 'content':True, 'likes':True}))
result = []
# 몽고디비에 저장된 id 값을 문자열로 변환
# 몽고디비에 저장된 likes 값을 정수로 변환 (정렬하기 위해)
for memo in memos:
memo['_id'] = str(memo['_id'])
memo['likes'] = int(memo['likes']) # line 31
result.append(memo)
# likes 많은 순으로 정렬
result.sort(key=lambda x: -x['likes'])
# memos라는 키 값으로 memo 정보 보내주기
return jsonify({'result': 'success', 'memos': result})
app.py의 line31에서 memo['likes']에 접근하고 있는데

mongosh에서 memos컬렉션을 조회해보면 likes키가 없는 딕셔너리가 존재한다.
이 값을 읽어오려고 시도해서 문제가 발생한 것이다.
deleteOne()쿼리로 해당 데이터를 삭제해주자 GET요청이 정상 동작하였다.
> db.memos.deleteOne({'title':'제목1'})
{ acknowledged: true, deletedCount: 1 }
https://korbillgates.tistory.com/95
[파이썬] 파이썬 에러 KeyError - 두 가지 해결 방법
안녕하세요 한주현입니다. 오늘은 파이썬 사전(Dictionary)에서 발생하는 오류인 KeyError 에 대하여 알아보겠습니다. 파이썬에서는 사전형(Dictionary)이 있는데요, 이것의 생김새는 다음과 같습니다. 1
korbillgates.tistory.com
'정글 > 프로젝트' 카테고리의 다른 글
| [트러블슈팅] MongoDB ECONNREFUSED 127.0.0.1:27017 에러 (1) | 2025.02.09 |
|---|