반응형
주소에서 위도와 경도를 가져오기 위해 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 등의 구문으로 원하는 리턴값이 나왔는지, 아니면 주소를 못 찾았는지에 따라 아래 동작을 다르게 처리하면 되겠다.
---
- https://daewonyoon.tistory.com/406 : NoneType object has no attribute 에러에 대한 일반적인 설명.
728x90
'프로그래밍 > Python' 카테고리의 다른 글
pyupbit WebSocketClient 예제코드를 실행할 때, TypeError: 'async for' requires an object with __aiter__ method, got Connect (0) | 2022.07.12 |
---|---|
파이썬 베쎌함수 그래프 그리기 (0) | 2022.07.08 |
pandas ValueError: If using all scalar values, you must pass an index (0) | 2022.06.08 |
Bithumb API, status 5100, Bad Request Request Time reqTime nowTime 에러 (0) | 2022.06.07 |
Sqrt(n) 의 연분수 표현 구하기 (0) | 2022.06.03 |