调用必应地图Driving Routes API报错求助
调用必应地图Driving Routes API报错求助
嗨,我看你在调用必应地图Driving Routes API计算路线距离时一直报错,特意帮你梳理了代码里几个大概率出问题的地方,应该能帮你解决:
URL格式写错了!
你拼的请求URL里有两处明显的格式错误:- 起点参数你写成了
wp,0=,正确的参数名应该是wp.0=(用英文点号分隔,不是逗号); - 终点参数误写为
mp.1=,实际应该是wp.1=; - 另外URL结尾多了个多余的
/,这会导致API无法正确解析你的请求,直接返回错误响应。
修正后的URL模板应该是:http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0={起点地址}&wp.1={终点地址}&key={你的API密钥}
- 起点参数你写成了
Python缩进完全不规范!
Python是靠缩进区分代码块的,你的原代码缩进乱得一塌糊涂——比如lista = []应该放在第一个for x in lista_cep:循环里面,内层for j in lista_cidade:的所有逻辑代码也都要缩进,不然代码逻辑会彻底混乱,要么循环不执行,要么直接抛出语法错误。完全没做异常处理,容错为0!
你直接从返回的JSON里链式取值result["resourceSets"][0]["resources"][0]['travelDistance'],但如果API请求失败(比如断网、密钥过期/无效、地址解析不了),返回的JSON结构根本不是你预期的样子,这时候直接取值会立刻抛出KeyError或者IndexError。比如当API识别不出你给的地址时,返回的resourceSets可能是空的,这时候取[0]肯定报错。
给你贴个修正后的代码,不仅改了上面的问题,还加了异常处理,能帮你排查具体哪里出问题:
import requests import pandas as pd chave_IPA = "Aqa9_KZFeRDAiAsJwyxVLQJh5tfZYeMyGHtUXEVd7PGm13xT1evy3vwA5MCcscqd" distancia_matrix = [] # 假设lista_cep和lista_cidade是你已经准备好的地址列表 for x in lista_cep: lista = [] for j in lista_cidade: # 修正后的URL,去掉多余符号,修正参数名 rota = f"http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0={x}&wp.1={j}&key={chave_IPA}" try: # 发起请求并检查请求是否成功 r = requests.get(url=rota) r.raise_for_status() # 请求失败(比如404、401)直接抛出异常 result = r.json() # 先检查API返回的结构是否符合预期 if (not result.get("resourceSets") or len(result["resourceSets"]) == 0 or not result["resourceSets"][0].get("resources") or len(result["resourceSets"][0]["resources"]) == 0): print(f"⚠️ 无法获取路线:从{x}到{j}的地址可能无效") lista.append(None) # 用None标记无法获取的距离 continue # 顺利拿到距离就存入列表 distancia = result["resourceSets"][0]["resources"][0]['travelDistance'] lista.append(distancia) except requests.exceptions.RequestException as e: print(f"❌ 请求出错:{e}") lista.append(None) except KeyError as e: print(f"❌ 解析响应出错,缺少字段:{e}") lista.append(None) distancia_matrix.append(lista) # 转换为DataFrame matrix = pd.DataFrame(distancia_matrix)
另外,你可以先单独测试一个简单的URL,比如直接在浏览器里拼个请求,看看返回的内容是不是正常的,也可以在代码里加个print(result),看看API到底返回了什么错误信息(比如密钥无效、地址无法解析之类的),这样排查问题会更高效。
备注:内容来源于stack exchange,提问作者vituu999
相关产品推荐
相关产品推荐

