본문 바로가기

프로그래밍/Python

Geopy AttributeError: 'NoneType' object has no attribute 'latitude'

반응형

주소에서 위도와 경도를 가져오기 위해 geopy를 이용하는 코드에서 no attribute 'latitude' 에러가 발생할 수 있다.

코드를 보자.

from geopy.geocoders import Nominatim


def geocoding(address):
    geolocoder = Nominatim(user_agent="South Korea", timeout=None)
    geo = geolocoder.geocode(address)
    x_y = [geo.latitude, geo.longitude]
    return x_y


for addr in ["강원 강릉시 해안로 1459", "강원 강릉시 초당순두부길 77번길 15"]:
    print(addr, geocoding(addr))

geocoding 함수는 사람들이 사용하는 주소를 문자열로 주면, 해당 주소의 위도와 경도를 반환하는 함수이다. 이 함수를 이용하여, 두가지 주소에 대한 위도와 경도를 구하려고 하였다.

그런데, 두번째 주소에서 AttributeError: 'NoneType' object has no attribute 'latitude' 라는 에러가 발생하였다. 실행결과를 보자.

강원 강릉시 해안로 1459 [37.8045208, 128.9059935]
Traceback (most recent call last):
  File "c:\temp\kin\hash_geocoding.py", line 13, in <module>
    print(addr, geocoding(addr))
  File "c:\temp\kin\hash_geocoding.py", line 7, in geocoding
    x_y = [geo.latitude, geo.longitude]
AttributeError: 'NoneType' object has no attribute 'latitude'

첫번째 주소인 "강원 강릉시 해안로 1459"에 대해서는 위도와 경도를 잘 구해서, 결과가 나왔다.

두번째 주소에 대해서 에러가 발생했다. geolocoder.geocode 함수가 이 주소에 대해서는 정보를 가지고 있지 않기 때문에 None 을 반환하여, geo 가 None 이 된다. 그래서 아래쪽의 geo.latitude 부분이 None.latitude 가 되고, None 은 당연하게 .latitude 라는 attribute 가 없기 때문에 에러가 발생했다.

이 문제를 해결하려면, if geo is None 등의 구문으로 원하는 리턴값이 나왔는지, 아니면 주소를 못 찾았는지에 따라 아래 동작을 다르게 처리하면 되겠다.

---

728x90