使用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
相关产品推荐
相关产品推荐

