You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用必应地图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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:04:29