Python: список индексов вне диапазона при выполнении запроса с использованием osmapi - PullRequest
1 голос
/ 19 марта 2019

Привет, я новичок в osmapi и Python тоже.Я писал сценарий для выполнения некоторых запросов, используя osmapi, пока не получил эту ошибку, и данные, кажется, работают по этой ссылке https://www.openstreetmap.org/way/77517260, и то же самое для ответа XML https://api.openstreetmap.org/api/0.6/way/77517260.

Когда япроверить другой способ идентификатора, он работает, но этот идентификатор 77517260 нет, вот следующая ошибка:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
~/.pyenv/versions/3.6.4/lib/python3.6/site-packages/osmapi/OsmApi.py in _OsmResponseToDom(self, response, tag, single)
   2060             all_data = osm_dom.getElementsByTagName(tag)
-> 2061             first_element = all_data[0]
   2062         except (xml.parsers.expat.ExpatError, IndexError) as e:

IndexError: list index out of range

During handling of the above exception, another exception occurred:

XmlResponseInvalidError                   Traceback (most recent call last)
<ipython-input-20-79d93245d84a> in <module>
----> 1 way = api.NodeWays(77517260)

~/.pyenv/versions/3.6.4/lib/python3.6/site-packages/osmapi/OsmApi.py in NodeWays(self, NodeId)
    513         uri = "/api/0.6/node/%d/ways" % NodeId
    514         data = self._get(uri)
--> 515         ways = self._OsmResponseToDom(data, tag="way")
    516         result = []
    517         for way in ways:

~/.pyenv/versions/3.6.4/lib/python3.6/site-packages/osmapi/OsmApi.py in _OsmResponseToDom(self, response, tag, single)
   2062         except (xml.parsers.expat.ExpatError, IndexError) as e:
   2063             raise XmlResponseInvalidError(
-> 2064                 "The XML response from the OSM API is invalid: %r" % e
   2065             )
   2066 

XmlResponseInvalidError: The XML response from the OSM API is invalid: IndexError('list index out of range',)

мой код Python:

import osmapi as osm
api = osm.OsmApi()
way = api.NodeWays(77517260)

1 Ответ

2 голосов
/ 19 марта 2019

Сначала - вы должны передать URL и учетные данные в конструкторе:

api = osm.OsmApi(api="https://api.openstreetmap.org", username="username", password="secret")

Далее - api/0.6/way/{id} - возможно, вы ищете WayGet метод.

Код:

import osmapi as osm api = osm.OsmApi(api="https://api.openstreetmap.org", username="username", password="secret") way = api.WayGet(77517260)

...