반응형
파이썬에서 중첩 딕셔너리 자료형 객체를 다루는 경우,
자주 발생 가능한 AttributeError: 'NoneType' object has no attribute 'get'오류의
원인과 해결법을 간략하게 정리해보도록 하겠습니다.
오류 개요
다음과 같이 'b'라는 key가 없는 딕셔너리에서 get 메서드 사용 이후,
추가로 get 메서드를 사용하려는 경우에 해당 에러가 발생합니다.
data = {"a": {1: "a1", 2: "a2"}}
a1 = data.get("a").get(1) # "a1"
a3 = data.get("a").get(3) # None
b1 = data.get("b").get(1) # 오류 발생!
위의 형태는 딕셔너리 중첩 형태(json 등)에서
내부 딕셔너리의 값을 호출하기 위해서 자주 사용되는 패턴인데요.
해당 key가 존재하지 않는 경우, 앞의 get에 의하여 None이 이미 반환된 상태에서
추가로 get을 사용하려고 해서 오류가 발생하게 됩니다.
data = {"a": {1: "a1", 2: "a2"}}
b = data.get("b") # None
b1 = b.get(1) # None -> get 불가능
해결 방안
딕셔너리 중첩 형태에서 get 메서드를 연달아 사용하려는 경우,
key가 없는 경우의 예외 처리를 위하여 get 내에 default 값을 빈 딕셔너리로 지정해주시면
예상치 못한 데이터의 케이스에 대하여 위의 오류를 방지할 수 있습니다.
# before
b1 = data.get("b").get(1) # 오류 발생!
# after
b1 = data.get("b", {}).get(1) # {}에서 get 시도 -> None
'Python > Debugging' 카테고리의 다른 글
TypeError: object async_generator can't be used in 'await' expression 해결 방법 (0) | 2024.03.08 |
---|---|
파이썬 multidict 설치 실패 해결 방법 (0) | 2024.01.17 |
ValueError: Precision not allowed in integer format specifier 원인 및 해결 방법 (0) | 2023.10.17 |