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

使用googletrans翻译DataFrame英文文本时遇AttributeError问题求助

解决AttributeError: 'NoneType' object has no attribute 'group'错误

错误根源

这个错误主要来自两个方面:

  • googletrans版本问题:新版(4.x+)的googletrans库API调用逻辑变更,稳定性差,容易返回None引发错误。
  • 数据脏值:language列存在非字典格式的记录,或all_activities列有空值(None),导致翻译函数接收无效输入。

分步解决方案

1. 清理脏数据

先过滤掉无效数据,避免传递None给翻译逻辑:

# 过滤language列为空或非字典的行
df = df[df['language'].notna() & df['language'].apply(lambda x: isinstance(x, dict))]
# 过滤all_activities为空的行(按需保留空值可跳过)
df = df[df['all_activities'].notna()]

2. 降级googletrans到稳定版本

新版googletrans存在API兼容问题,建议安装稳定候选版:

pip install googletrans==4.0.0-rc1

3. 优化翻译函数与DataFrame操作

  • 把翻译器初始化移到函数外,避免重复创建实例浪费资源
  • 增加异常处理,翻译失败时返回原文本,避免中断程序
  • 简化掩码逻辑,更安全地判断语言类型
from googletrans import Translator

# 全局初始化翻译器
translator = Translator()

def translate_en_to_fr(text):
    try:
        # 跳过空字符串或非文本类型输入
        if not isinstance(text, str) or text.strip() == "":
            return text
        translated = translator.translate(text, src='en', dest='fr')
        return translated.text
    except Exception as e:
        print(f"翻译出错: {str(e)}")
        return text

# 生成需要翻译的行掩码
translate_mask = df['language'].apply(lambda x: x.get('language') == 'en')
# 批量应用翻译
df.loc[translate_mask, 'all_activities'] = df.loc[translate_mask, 'all_activities'].apply(translate_en_to_fr)

4. 可选:替换为更稳定的翻译库

如果googletrans仍有问题,可改用deep-translator库(支持多个翻译API):

pip install deep-translator

对应的翻译函数:

from deep_translator import GoogleTranslator

def translate_en_to_fr(text):
    try:
        if not isinstance(text, str) or text.strip() == "":
            return text
        return GoogleTranslator(source='en', target='fr').translate(text)
    except Exception as e:
        print(f"翻译出错: {str(e)}")
        return text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:18:22