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

Python调用有道翻译接口取返回值时报KeyError: '1'如何解决?

问题修复方案

核心原因

KeyError: '1' 说明接口返回的 response 结构和预期不符,response['data'] 中不存在键为 1 的值。

排查&修复步骤

  • 第一步:替换不安全的eval解析方式,新增调试打印逻辑
    直接用eval解析接口返回内容风险极高,且容易因为返回内容格式异常得到错误结构,改为用json.loads解析,同时先打印完整的接口返回内容确认结构,可参考调整后的代码:
import urllib
import urllib2
import json
from collections import OrderedDict

# 新增请求头,模拟浏览器访问避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

myDict = {}
lemma_word_pair = OrderedDict()
for line in original_text:        
    if len(line)>10:
        myDict['1'] = {"src":line,"tag":"P"}
        postdata = {
                'data':json.dumps({'1':myDict['1']}),
                'type':'X',
                'ue':'UTF-8'
                }
        data = urllib.urlencode(postdata)
        # 构造带请求头的请求对象
        req = urllib2.Request("http://fanyi.youdao.com/web2/index.do", data=data, headers=headers)
        resp_content = urllib2.urlopen(req).read()
        # 打印原始返回内容,方便排查结构问题
        print("接口返回原始内容:", resp_content)
        # 用json.loads替代eval,安全且规范
        try:
            response = json.loads(resp_content)
        except json.JSONDecodeError as e:
            print("返回内容不是合法JSON:", e)
            continue
        # 取值前先判断键是否存在,避免触发KeyError
        if 'data' in response and '1' in response['data']:
            word_count = len(response['data']['1'])
        else:
            print("返回结构不符合预期,response完整内容:", response)
            # 可自行补充错误处理逻辑,比如跳过当前行、重试请求等
            continue
  • 第二步:确认接口规则是否变更
    你当前调用的是有道未公开的内部接口,如果新增请求头后还是返回异常结构,说明接口的请求参数规则已经调整,比如现在需要额外传入签名、时间戳等校验参数,或者接口路径已经下线。

长期使用建议

如果是需要稳定运行的场景,不要依赖这类未公开的内部接口,建议申请有道翻译官方开放API,按照官方文档要求构造合规请求,避免接口规则临时调整导致代码失效。

内容的提问来源于stack exchange,提问作者sunwenxuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:39:00