#python #geopy
#python #geopy
Вопрос:
Я хотел создать программу, в которой вы вводите свой адрес (пример в коде — голландский адрес), а затем программа выдает в качестве выходных данных долготу и широту этого адреса. Я также попытался сделать его более удобным для пользователя, поэтому, если введенный адрес не существует, программа сообщит об этом. код является:
from geopy.geocoders import ArcGIS
nom = ArcGIS()
adres = input("enter your adress as folows:n 32 Gunterstein, Amsterdam, 1081 CJn vul in: ")
n = nom.geocode(adres)
if adres in nom:
print("longitude:",n.longitude)
print("latitude:", n.latitude)
else:
print("adress doesn't exist, please try again.")
print("end")
если пользователь вводит действительный адрес, код работает, но когда я пробую это, вводя ерунду, я получаю следующую ошибку:
enter your adress as folows:
32 Gunterstein, Amsterdam, 1081 CJ
vul in: nonsense
Traceback (most recent call last):
File "breede_en_lengte_graden.py", line 7, in <module>
if adres in nom:
TypeError: argument of type 'ArcGIS' is not iterable
Что не так с кодом, из-за которого я получаю эту ошибку?
Спасибо!
Комментарии:
1. Может быть, попробовать использовать
try
иexcept
вместоif else
?2. Что
if adres in nom
следует делать в вашем понимании?3. @FlyingTeller я думаю, что if проверяет, действителен ли адрес, но когда я смотрю на ответы на мой вопрос, это не так
Ответ №1:
Это один из способов сделать это с try-except
блоком:
try:
print("longitude:", n.longitude)
print("latitude:", n.latitude)
except AttributeError:
print("adress doesn't exist, please try again.")
print("end")
Вы также можете сделать это с if-else
блоком, но вам придется сделать это немного по-другому:
if n is not None:
print("longitude:", n.longitude)
print("latitude:", n.latitude)
else:
print("adress doesn't exist, please try again.")
print("end")
Причина такого рода проверки заключается в том, что nom.geocode(adres)
на недопустимых адресах не происходит сбой, вместо этого он просто возвращает None
значение, которому присваивается значение n
.
Комментарии:
1. Спасибо, это очень помогло
Ответ №2:
Я не думаю, что это выдает ошибку по ошибочному адресу.
n = nom.geocode('sdf324uio')
n is None
Верно
Просто проверьте, n
есть None
ли это, чтобы увидеть, был ли передан ему действительный адрес.
Редактировать:
Забавно, что на самом деле nonsense
существует как place и возвращает действительное местоположение (это была моя первая попытка для несуществующего адреса):
n = nom.geocode('nonsense')
n
Местоположение (Ерунда, (-23.56400999999994, -46.66579999999993, 0.0))
Комментарии:
1. Спасибо за объяснение, теперь я понимаю