Python/Debugging

AttributeError: 'NoneType' object has no attribute 'get' 원인 / 해결 방법

jimmy_AI 2024. 2. 8. 19:57
반응형

파이썬에서 중첩 딕셔너리 자료형 객체를 다루는 경우,

자주 발생 가능한 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