정글/프로젝트

[트러블슈팅] 파이썬 KeyError

nkdev 2025. 2. 9. 06:59

⚠️ 에러

플라스크 서버에서 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