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

googletrans库报错:'NoneType' object has no attribute 'group'

问题根因

PyPI源默认推送的googletrans==3.0.0为2020年之后就停止维护的旧版本,其内部硬编码的谷歌翻译网页TKK token提取正则,已经无法匹配谷歌多次迭代后的翻译页面前端结构。正则匹配无结果返回None时,代码未做空值校验直接调用.group()方法,最终触发AttributeError: 'NoneType' object has no attribute 'group'报错,和业务代码、待翻译文本内容本身无关。

排查思路
  • 版本校验:执行命令pip show googletrans查看当前安装版本,若返回版本号为3.0.0,可直接判定为版本适配问题
  • 网络校验:确认当前网络可正常访问谷歌翻译服务,排除代理配置错误、请求被拦截导致页面内容加载不全、正则匹配失败的情况
  • 逻辑校验:定位报错栈指向的gtoken.py第62行代码,可看到旧代码未对RE_TKK.search()的返回值做非空判断,直接链式调用group()方法,一旦匹配失败必然抛错
解决方案

方案1:安装适配新版接口的修复版本(优先推荐)

旧版本维护停滞后,社区已有修复适配的发布版本,无需修改原有业务代码,执行以下命令替换安装即可:

pip uninstall googletrans -y
pip install googletrans==4.0.0-rc1

安装完成后直接运行原有翻译代码即可正常使用。如果存在偶发请求超时问题,初始化Translator时可增加超时配置:

translator = Translator(timeout=10)

方案2:本地临时修复匹配规则(不推荐)

如果暂时无法替换版本,可手动修改本地安装路径下的gtoken.py文件,找到_update方法内的匹配逻辑,替换为带空值兜底的代码:

# 原报错代码
# code = self.RE_TKK.search(r.text).group(1).replace('var ', '')

# 修改后的兜底逻辑
tkk_match = self.RE_TKK.search(r.text)
if not tkk_match:
    self.RE_TKK = re.compile(r"tkk:'(\d+\.\d+)'", re.DOTALL)
    tkk_match = self.RE_TKK.search(r.text)
code = tkk_match.group(1).replace('var ', '')

该方案仅临时生效,后续谷歌调整前端页面结构后会再次失效。

方案3:增加重试与频率控制

批量翻译场景下,短时间高频请求会触发谷歌的反爬拦截,导致返回的页面内容异常、正则匹配失败,可在翻译逻辑中增加重试机制与随机延时,降低报错概率:

import time
import random
from googletrans import Translator

translator = Translator(timeout=15)

def safe_translate(text):
    max_retry = 3
    for _ in range(max_retry):
        try:
            result = translator.translate(text, dest='en').text
            time.sleep(random.uniform(0.5, 2))
            return result
        except Exception:
            time.sleep(2)
    # 多次重试失败返回原文本,避免整体任务中断
    return text

df['data'] = df['tweet'].apply(safe_translate)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:06:24