Как исправить ошибку `TypeError: аргумент типа ‘ArcGIS’ не повторяется` в geopy?

#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. Спасибо за объяснение, теперь я понимаю