我试图使用谷歌地图api获得从A到B的路线,但是我遇到了一个愚蠢的错误,我自己无法修复,你的帮助将会被贬低。所以,这是我的代码
import googlemaps
from datetime import datetime
import pprint
import json
gmaps = googlemaps.Client(key='HIDDEN')
now = datetime.now()
directions_result = gmaps.directions("Sydney Olympic Park, New South Wales 2127, Australia",
"Parramatta, NSW",
mode="transit",
departure_time=now)
for leg in directions_result[0]['legs']:
startAddress = leg['start_address']
print "Start Address:", startAddress
endAddress = leg['end_address']
print "End Address:", endAddress
distance=leg['distance']['text']
print "Distance:",distance
duration=leg['duration']['text']
print "Duration:",duration
for step in leg['steps']:
html_instructions = step['html_instructions']
instr= step['distance']['text']
instrtime=step['duration']['text']
print html_instructions + " " +instr+ " " + instrtime
#till here works fine
for stepp in step['steps']:
y=step['steps'][0]['html_instructions']# but I would like to get step['steps']['steps']['html_instructions'], but got 'list index must be int not str'
print y
#this loop runs 1 time and then gives an error
这是我得到的输出:
Start Address: Sydney Olympic Park NSW 2127, Australia
End Address: Parramatta NSW 2150, Australia
Distance: 11.1 km
Duration: 36 mins
Walk to Olympic Park Station 0.3 km 4 mins
Head <b>northeast</b> on <b>Dawn Fraser Ave</b> toward <b>Olympic Blvd</b> <-- This is the 1st passage of "for stepp in step['steps']:"
Head <b>northeast</b> on <b>Dawn Fraser Ave</b> toward <b>Olympic Blvd</b>
Train towards Lidcombe 3.4 km 6 mins
Traceback (most recent call last):
File "getdirections.py", line 43, in <module>
for stepp in step['steps']:
KeyError: 'steps'
看起来python第一次查找,找到它,打印它,然后查看另一次,但是找不到它并给出了这个错误,但是当条件不满足时循环应该退出。
这是我的json回复
[{u'bounds': {u'northeast': {u'lat': -33.8085175, u'lng': 151.0651324},
u'southwest': {u'lat': -33.8496094, u'lng': 151.0012743}},
u'copyrights': u'Map data \xa92018 Google',
u'legs': [{u'arrival_time': {u'text': u'1:09pm',
u'time_zone': u'Australia/Sydney',
u'value': 1515463756},
u'departure_time': {u'text': u'12:32pm',
u'time_zone': u'Australia/Sydney',
u'value': 1515461520},
u'distance': {u'text': u'11.9 km', u'value': 11938},
u'duration': {u'text': u'37 mins', u'value': 2236},
u'end_address': u'Parramatta NSW 2150, Australia',
u'end_location': {u'lat': -33.8146729, u'lng': 151.0012743},
u'start_address': u'Sydney Olympic Park NSW 2127, Australia',
u'start_location': {u'lat': -33.8484821, u'lng': 151.0651324},
u'steps': [{u'distance': {u'text': u'0.2 km', u'value': 243},
u'duration': {u'text': u'3 mins', u'value': 198},
u'end_location': {u'lat': -33.849457,
u'lng': 151.062759},
u'html_instructions': u'Walk to Dawn Fraser Ave before Edwin Flack Ave',
u'polyline': {u'points': u'~_rmEa|_y[Pn@bBpGz@|CPE'},
u'start_location': {u'lat': -33.8484821,
u'lng': 151.0651324},
u'steps': [{u'distance': {u'text': u'0.2 km',
u'value': 243},
u'duration': {u'text': u'3 mins',
u'value': 198},
u'end_location': {u'lat': -33.849457,
u'lng': 151.062759},
u'html_instructions': u'Head <b>southwest</b> on <b>Dawn Fraser Ave</b>',
u'polyline': {u'points': u'~_rmEa|_y[Pn@bBpGz@|CPE'},
u'start_location': {u'lat': -33.8484821,
u'lng': 151.0651324},
u'travel_mode': u'WALKING'}],
u'travel_mode': u'WALKING'},
{u'distance': {u'text': u'11.2 km',
u'value': 11179},
u'duration': {u'text': u'32 mins',
u'value': 1920},
u'end_location': {u'lat': -33.8175958,
u'lng': 151.0045742},
u'html_instructions': u'Bus towards Parramatta',
u'polyline': {u'points': u'bfrmEgm_y[OF?@l@rB_PjHC@iD|AUDi@Bi@CoAc@aAfDQdAGpAHlBCjADnAN\\`@TdHvCaA`Dq@fAy@fAiAx@qCvAoAdAe@n@{AnD?@k@|ASVBJENOHMIEQIIo@c@cAcAS?KKCYk@q@oAkAk@c@UEGO?Iw@k@AAcC}A{BaA_@KQ@IOyAc@gG}AQ?yAs@aBiA}AyAaAkBCEYi@C?OCKWmE~Dg@u@uAa@A?}@Uq@~DoCi@A?eAWm@zD?@cApEuBjMcCdOeB_@kIyBA?kHmB}AUcFa@}f@}CgJi@oH@_BEsBBe@FOPG\\cBjU?@?@{A~SA@?@{Bb[?@eAzN?BgAzNOtAYzA_A`DA@sAzEiB~E?@Qh@uArFeAxFGtA?BDlFXtPEtEMdDw@hI?D}@xJIhBXlI?Hp@rQ?@^rJ?@\\`LQvCKlBjBNfGvApA\\jBr@tBbAzAXNNxBl@B?tEdA@?x@TnCd@jHYd@Wn@y@h@_@xAc@Jh@Bd@Ez@IVANc@dAgBzD'},
u'start_location': {u'lat': -33.849457,
u'lng': 151.062759},
u'transit_details': {u'arrival_stop': {u'location': {u'lat': -33.8175958,
u'lng': 151.0045742},
u'name': u'Parramatta Station, Stand B3'},
u'arrival_time': {u'text': u'1:03pm',
u'time_zone': u'Australia/Sydney',
u'value': 1515463381},
u'departure_stop': {u'location': {u'lat': -33.849457,
u'lng': 151.062759},
u'name': u'Dawn Fraser Ave before Edwin Flack Ave'},
u'departure_time': {u'text': u'12:35pm',
u'time_zone': u'Australia/Sydney',
u'value': 1515461719},
u'headsign': u'Parramatta',
u'line': {u'agencies': [{u'name': u'State Transit Sydney',
u'phone': u'011 61 13 15 00',
u'url': u'http://transportnsw.info/'}],
u'color': u'#03a9f4',
u'name': u'Parramatta to Burwood via Sydney Olympic Park',
u'short_name': u'525',
u'text_color': u'#ffffff',
u'vehicle': {u'icon': u'//maps.gstatic.com/mapfiles/transit/iw2/6/bus2.png',
u'local_icon': u'//maps.gstatic.com/mapfiles/transit/iw2/6/au-sydney-bus.png',
u'name': u'Bus',
u'type': u'BUS'}},
u'num_stops': 27},
u'travel_mode': u'TRANSIT'},
{u'distance': {u'text': u'0.5 km', u'value': 516},
u'duration': {u'text': u'7 mins', u'value': 395},
u'end_location': {u'lat': -33.8146729,
u'lng': 151.0012743},
u'html_instructions': u'Walk to Parramatta NSW 2150, Australia',
u'polyline': {u'points': u'~~kmEqatx[KIEJMTWh@OZMVMZEPELABARANQFI@E@[@E?A?A?CAAACAEGSN[NMFMDIBK@UBG@IAC?A?G?YDQBC@CBA@A@A@CBKJKFMDOBG@E?E?QACVIf@Kr@[xBSzA'},
u'start_location': {u'lat': -33.8175958,
u'lng': 151.0045742},
u'steps': [{u'distance': {u'text': u'0.1 km',
u'value': 123},
u'duration': {u'text': u'1 min',
u'value': 84},
u'end_location': {u'lat': -33.8170114,
u'lng': 151.0034771},
u'html_instructions': u'Head <b>northwest</b> on <b>Liverpool-Parramatta Transitway</b> toward <b>Church St</b>',
u'polyline': {u'points': u'~~kmEqatx[KIEJMTWh@OZMVMZEPELABARAN'},
u'start_location': {u'lat': -33.8175958,
u'lng': 151.0045742},
u'travel_mode': u'WALKING'},
{u'distance': {u'text': u'52 m',
u'value': 52},
u'duration': {u'text': u'1 min',
u'value': 33},
u'end_location': {u'lat': -33.8165694,
u'lng': 151.0034844},
u'html_instructions': u'Turn <b>right</b> onto <b>Church St</b>',
u'maneuver': u'turn-right',
u'polyline': {u'points': u'h{kmEwzsx[QFI@E@[@E?A?A?CAAACAEG'},
u'start_location': {u'lat': -33.8170114,
u'lng': 151.0034771},
u'travel_mode': u'WALKING'},
{u'distance': {u'text': u'0.2 km',
u'value': 183},
u'duration': {u'text': u'2 mins',
u'value': 134},
u'end_location': {u'lat': -33.8150393,
u'lng': 151.0029224},
u'html_instructions': u'Turn <b>left</b> to stay on <b>Church St</b>',
u'maneuver': u'turn-left',
u'polyline': {u'points': u'pxkmEwzsx[SN[NMFMDIBK@UBG@IAC?A?G?YDQBC@CBA@A@A@CBKJKFMDOBG@E?E?QA'},
u'start_location': {u'lat': -33.8165694,
u'lng': 151.0034844},
u'travel_mode': u'WALKING'},
{u'distance': {u'text': u'0.2 km',
u'value': 158},
u'duration': {u'text': u'2 mins',
u'value': 144},
u'end_location': {u'lat': -33.8146729,
u'lng': 151.0012743},
u'html_instructions': u'Turn <b>left</b> onto <b>Macquarie St</b>',
u'maneuver': u'turn-left',
u'polyline': {u'points': u'~nkmEgwsx[CVIf@Kr@[xBSzA'},
u'start_location': {u'lat': -33.8150393,
u'lng': 151.0029224},
u'travel_mode': u'WALKING'}],
u'travel_mode': u'WALKING'}],
u'traffic_speed_entry': [],
u'via_waypoint': []}],
u'overview_polyline': {u'points': u'~_rmEa|_y[tB`Iz@|CPEOHl@rB_PjHC@iD|AUDi@Bi@CoAc@aAfDQdAGpAHlBCjADnAN\\fIlDaA`Dq@fAy@fAiAx@qCvAoAdAe@n@{AnD?@k@|ASVBJENOHMIEQIIo@c@cAcAS?KKCYk@q@{BoBUEGO?Iw@k@AAcC}A{BaA_@KQ@IOyAc@gG}AQ?yAs@aBiA}AyAaAkB]o@SCKWmE~Dg@u@uAa@A?}@Uq@~DqCi@eAWm@|DcApEuBjMcCdOqLyCmHmB}AUcFa@}f@}CgJi@oH@_BEsBBe@FOPG\\cBlU{A`T}Bf[eA`OgAzNOtAYzA_A`DA@sAzEiB~EQj@uArFeAxFGxADlFXtPEtEMdDw@nI}@xJIhBXvIpAj]\\`LQvCKlBjBNfGvApA\\jBr@tBbAzAXNNxBl@xEdAz@TnCd@jHYd@Wn@y@h@_@xAc@Jh@Bd@Ez@IVANc@dAgBzDKIS`@cAxBK^CVANQFOBe@@OMo@^[Ls@JWAs@NIHWR]HM@WAu@lFSzA'},
u'summary': u'',
u'warnings': [u'Walking directions are in beta. Use caution \u2013 This route may be missing sidewalks or pedestrian paths.'],
u'waypoint_order': []}]
再一次,我需要从Json中提取所有方向,其中一些是缩进的[leg] [步骤] [步骤],我能够得到所有[leg] [步骤]但是在解析时遇到问题[腿] [步骤] [步骤] 第二天我和这个人打架,不知道在哪里看。有关stackoverflow的所有先前问题都没有回复此问题,请不要标记为dublicate(我已经阅读了所有相关帖子)
答案 0 :(得分:1)
检查&#39;步骤&#39;在访问它之前就在你的词典中。
...
#till here works fine
if 'steps' in step:
for stepp in step['steps']:
y=stepp['html_instructions']
print y
这样做你想要的吗?