TypeError: 'float' object is not subscriptable

Hi
I’m trying to return the distance between two point but I’m getting this error:

TypeError: ‘float’ object is not subscriptable

routes = directions(client, coords)

for x in routes.values():
    distance = int(int(x[0]['summary']['distance'])/1000)

print(distance)

The output of the routes shows that distance is basically a float number and not a list.
{‘routes’: [{‘summary’: {‘distance’: 24836.2, ‘duration’: 1849.1},

Hey,

this is a problem with your dict/list iteration and access by index.
If what you posted below the code is indeed the content of the routes variable, this code should work.
Please provide a more complete code example for further analysis.

Best regards

This is a complete code:

from geopy.geocoders import Nominatim
import openrouteservice
from openrouteservice.directions import directions

locator = Nominatim(user_agent='myGeocoder')

tco_loc = locator.geocode('Svaneviksveien 29I, 5063 Bergen')
user_loc = locator.geocode('Vestlivegen 7B, 5260 Indre Arna')

tco_loc = (tco_loc.longitude, tco_loc.latitude)
user_loc = (user_loc.longitude, user_loc.latitude)

coords = (tco_loc, user_loc)

client = openrouteservice.Client(key='')
routes = directions(client, coords)

for x in routes.values():
    distance = int((x[0]['summary']['distance'])/1000)

print(distance)

If I print routes it works if I iterate over dictionary it doesn’t work

Hey,

the problem is that the routes dict contains more than just ‘routes’:

>>> len(routes)
3

Thus, you’re not running into an error with the value of the routes-key, but with following values.
Pull the print()-statement into your loop and you’ll see what I mean.

Best regards

1 Like

got it thanks

corrected:
distance_km = int((routes['routes'][0]['summary']['distance'])/1000)

1 Like