settings.get("limit", 10)에서 10은 키가 없을 때 쓰는 값입니다. 키가 있고 저장된 값이 None이면 get()은 그 None을 돌려줍니다. 키가 없거나 값이 None일 때 기본값을 쓰고 싶다면 먼저 값을 읽고 is None을 검사하세요.
settings = {"limit": None}
limit = settings.get("limit")
if limit is None:
limit = 10
print(limit)
10
키가 있는지와 어떤 값이 들어 있는지 비교하기
가상의 설정값에서 키 누락, None, 0, 빈 문자열을 같은 방식으로 읽어 봅니다. repr()를 써서 빈 문자열도 출력에서 보이게 했습니다.
settings = {"none": None, "zero": 0, "blank": ""}
print("key present get none_only or")
for key in ("missing", "none", "zero", "blank"):
value = settings.get(key)
none_only = 10 if value is None else value
print(key, key in settings, repr(settings.get(key, 10)),
repr(none_only), repr(value or 10))
key present get none_only or
missing False 10 10 10
none True None 10 10
zero True 0 0 10
blank True '' '' 10
get(key, 10)은 missing에서만 기본값을 씁니다. none_only는 키 누락과 None에 기본값을 쓰되, 저장된 0과 빈 문자열은 돌려줍니다. value or 10에서는 0과 빈 문자열도 참·거짓 평가에서 거짓이어서 10으로 바뀝니다.
키가 빠진 경우와 누군가 None을 저장한 경우에 다른 처리가 필요하면 key in settings로 존재부터 확인하세요. 두 경우 모두 기본값을 쓰기로 했다면 첫 예제의 is None 검사로 충분합니다.
예제는 Windows의 Python 3.14.3에서 실행했습니다. Python의 dict.get 문서와 참·거짓 판정 규칙을 참고하세요.
“파이썬 dict.get에 기본값을 줬는데 None이 나오는 이유”에 대한 1개의 생각