IT프로그래밍/파이썬

파이썬 딕셔너리 사용법 : KeyError를 get으로 막는 가장 쉬운 방법

MannizDev 2026. 8. 14.

파이썬 딕셔너리에서 값을 꺼냈는데 갑자기 KeyError가 나타났나요? 괄호 모양은 맞는데 프로그램이 멈췄다면, 대부분 딕셔너리에 없는 키를 dict[key]로 바로 꺼낸 경우입니다.

해결 원리는 간단합니다. 반드시 있는 키는 대괄호로 꺼내고, 없을 수도 있는 키는 get()이나 in으로 확인합니다. 카페 메뉴 예제로 값 저장, 조회, 수정, 반복까지 한 번에 연결해 보겠습니다.

파이썬 딕셔너리 KeyError를 get으로 해결하는 대표 이미지

확인한 환경

  • 작성 기준 : 2026년 8월 13일
  • 운영체제 : Windows
  • 직접 실행 : Python 3.9.13
  • 공식 문서 확인 : Python 3.14.6 데이터 구조 문서

예제 파일 5개를 직접 실행했습니다. 없는 키를 대괄호로 조회했을 때 KeyError: '딸기라테'가 발생했고, 같은 키를 get()으로 조회하면 프로그램이 멈추지 않고 None 또는 지정한 기본값을 반환하는 것을 확인했습니다.

딕셔너리는 이름표로 값을 찾는 서랍입니다

리스트는 0, 1, 2처럼 위치 번호로 값을 찾습니다. 딕셔너리는 사람이 정한 로 값을 찾습니다.

menu = {
    "아메리카노": 3500,
    "카페라테": 4200,
    "레몬에이드": 4500,
}

여기서 "아메리카노"는 키, 3500은 값입니다. 콜론 왼쪽이 키이고 오른쪽이 값이라고 보면 됩니다.

아메리카노 3500
카페라테 4200
레몬에이드 4500

리스트와 차이가 헷갈린다면 파이썬 리스트 사용법 : 생성, 추가, 삭제, 정렬 예제를 먼저 보고 오셔도 좋습니다. 리스트는 순서가 중심이고, 딕셔너리는 키와 값의 연결이 중심입니다.

대괄호로 값을 하나 꺼내 봅니다

카페라테의 가격만 필요하면 다음처럼 키를 대괄호 안에 씁니다.

print(menu["카페라테"])

실행 결과입니다.

4200

키의 철자와 띄어쓰기는 정확히 같아야 합니다. "카페라테""카페 라테"는 서로 다른 키입니다.

없는 키를 꺼내면 KeyError가 납니다

메뉴에 없는 딸기라테를 바로 조회해 보겠습니다.

menu = {
    "아메리카노": 3500,
    "카페라테": 4200,
}

print(menu["딸기라테"])

로컬 Python 3.9.13에서 실행한 오류 원문은 다음과 같습니다.

Traceback (most recent call last):
  File "02_key_error.py", line 6, in <module>
    print(menu["딸기라테"])
KeyError: '딸기라테'

없는 딕셔너리 키 딸기라테를 조회해 KeyError가 발생한 실행 기록

오류의 마지막 줄을 먼저 보세요. KeyError 뒤의 '딸기라테'가 찾지 못한 키입니다. 딕셔너리가 고장 난 것이 아니라, 요청한 이름표가 딕셔너리 안에 없다는 뜻입니다.

get을 쓰면 프로그램이 멈추지 않습니다

주문처럼 사용자가 무엇을 입력할지 모르는 상황에서는 키가 없을 가능성이 있습니다. 이때 get()이 편합니다.

print(menu.get("딸기라테"))

키가 없으면 오류 대신 None이 나옵니다.

None

None보다 알아보기 쉬운 안내가 필요하면 두 번째 인수에 기본값을 넣습니다.

print(menu.get("딸기라테", "메뉴 없음"))
print(menu.get("아메리카노", "메뉴 없음"))

실행 결과입니다.

메뉴 없음
3500

첫 번째 줄은 키가 없어서 기본값을 출력하고, 두 번째 줄은 키가 있으므로 실제 가격을 출력합니다. get()이 딕셔너리에 새 메뉴를 추가하는 것은 아닙니다. 값을 안전하게 읽기만 합니다.

대괄호와 get은 언제 구분할까

제가 초보 예제를 만들 때 사용하는 기준은 다음과 같습니다.

상황 추천 방식 이유
반드시 있어야 하는 설정값 menu["키"] 없으면 즉시 오류가 나서 데이터 문제를 빨리 발견함
사용자 입력처럼 없을 수도 있는 값 menu.get("키") 키가 없어도 프로그램이 멈추지 않음
키가 있을 때만 별도 작업 if "키" in menu 존재 여부에 따라 실행 흐름을 나누기 쉬움

무조건 get()만 쓰면 필수 데이터가 빠진 사실을 놓칠 수 있습니다. 반대로 모든 조회에 대괄호를 쓰면 예상 가능한 입력 하나 때문에 프로그램 전체가 멈출 수 있습니다. 중요한 것은 어느 쪽이 더 좋은지가 아니라, 그 키가 반드시 있어야 하는가입니다.

in으로 먼저 확인하면 안내 문장을 바꿀 수 있습니다

키가 있을 때와 없을 때 다른 행동을 하려면 in을 사용합니다.

order = "카페라테"

if order in menu:
    print(order, menu[order])
else:
    print("메뉴 없음")

실행 결과입니다.

카페라테 4200

order in menu는 값 4200을 찾는 것이 아니라 키 목록에서 카페라테를 찾습니다. 문자열에서 in이 어떻게 동작하는지는 파이썬 in 연산자 기초 : 문자열 속 단어를 어떻게 찾을까에서 이어서 확인할 수 있습니다.

값 추가와 수정은 같은 모양입니다

새 메뉴를 추가할 때도 대괄호를 사용합니다.

menu["초코라테"] = 4800

이미 있는 키에 새 값을 넣으면 추가가 아니라 수정입니다.

menu["아메리카노"] = 3800

두 줄을 실행한 뒤 딕셔너리는 다음처럼 바뀝니다.

{'아메리카노': 3800, '카페라테': 4200, '레몬에이드': 4500, '초코라테': 4800}

키는 한 딕셔너리 안에서 하나만 존재합니다. 같은 키를 두 번 적으면 마지막 값이 남습니다.

menu = {
    "아메리카노": 3500,
    "아메리카노": 3800,
}

print(menu)
{'아메리카노': 3800}

이 동작은 가격 수정에는 편하지만, 같은 이름의 데이터를 여러 개 보관할 때는 주의해야 합니다. 여러 값을 순서대로 쌓아야 한다면 리스트가 더 잘 맞습니다.

items로 키와 값을 함께 반복합니다

메뉴판 전체를 한 줄씩 출력하려면 items()for문을 연결합니다.

for name, price in menu.items():
    print(name, price)
아메리카노 3500
카페라테 4200
레몬에이드 4500

name에는 키가, price에는 값이 차례로 들어옵니다. 반복문 자체가 낯설다면 Python for문 사용법 : range 반복문과 리스트 반복 예제를 함께 보세요.

Python 3.7부터 딕셔너리는 입력된 순서를 보존합니다. 다만 이름순이나 가격순 출력이 필요하다면 저장 순서에 기대지 말고 정렬 기준을 코드에 분명히 적는 편이 안전합니다.

KeyError가 계속 날 때 확인할 네 가지

1. 대소문자가 같은가

"Latte""latte"는 다른 키입니다.

2. 앞뒤 공백이 숨어 있지 않은가

사용자 입력에는 공백이 붙을 수 있습니다.

order = input("메뉴를 입력하세요 : ").strip()
print(menu.get(order, "메뉴 없음"))

strip()은 문자열 앞뒤 공백을 제거합니다.

3. 키가 아니라 값을 찾고 있지 않은가

print(3500 in menu)

이 코드는 값이 아니라 키에서 3500을 찾습니다. 값을 확인하려면 menu.values()를 사용합니다.

print(3500 in menu.values())

4. get 결과를 바로 계산하지 않는가

기본값을 지정하지 않은 get()은 키가 없을 때 None을 반환합니다.

price = menu.get("딸기라테")
print(price + 1000)

이 경우 KeyError는 피했지만 None과 숫자를 더할 수 없어 다른 TypeError가 발생합니다. 계산에 쓸 값이라면 숫자 기본값을 정하거나, None인지 먼저 확인하세요.

price = menu.get("딸기라테")

if price is None:
    print("메뉴 없음")
else:
    print(price + 1000)

바로 써볼 전체 예제

아래 코드는 메뉴를 입력받고, 있으면 가격을 보여주고, 없으면 안내 문장을 출력합니다.

menu = {
    "아메리카노": 3500,
    "카페라테": 4200,
    "레몬에이드": 4500,
}

order = input("메뉴를 입력하세요 : ").strip()
price = menu.get(order)

if price is None:
    print("해당 메뉴를 찾지 못했습니다.")
else:
    print(order, price, "원")

카페라테를 입력하면 다음처럼 나옵니다.

메뉴를 입력하세요 : 카페라테
카페라테 4200 원

없는 메뉴를 입력해도 프로그램은 오류로 멈추지 않습니다.

메뉴를 입력하세요 : 딸기라테
해당 메뉴를 찾지 못했습니다.

오늘 기억할 한 줄

KeyError가 보이면 오류 마지막 줄의 키를 확인하고, 그 키가 없을 수도 있는 상황이라면 dict.get("키", 기본값) 또는 if "키" in dict로 바꾸면 됩니다.

먼저 menu["카페라테"], menu.get("딸기라테", "메뉴 없음"), "카페라테" in menu 세 줄을 직접 바꿔 실행해 보세요. 딕셔너리는 문법을 외우는 것보다 “키가 반드시 있는가?”를 판단하는 순간부터 훨씬 쉬워집니다.

참고한 공식 문서

댓글

💲 추천 글