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

使用googletrans库翻译DataFrame中荷兰语列时出现TypeError: JSON对象必须为str、bytes或bytearray而非NoneType的解决方法

解决googletrans翻译DataFrame列时的JSON TypeError问题

我来帮你搞定这个TypeError: the JSON object must be str, bytes or bytearray, not NoneType错误——这个坑我之前也踩过,主要和googletrans库的API兼容性、谷歌的反拦截机制,还有文本处理的细节有关,下面给你一步步的解决方案:

1. 优先排查googletrans版本问题

旧版的googletrans(尤其是4.0.0-rc1之后的版本)经常因为谷歌翻译接口更新而失效,导致请求返回None,进而触发JSON解析错误。你可以先降级到稳定的候选版本,或者用社区维护的分支版本:

  • 先卸载现有版本:
    pip uninstall googletrans -y
    
  • 安装稳定的候选版本:
    pip install googletrans==4.0.0-rc1
    
    或者使用社区维护的googletrans-new:
    pip install googletrans-new
    

2. 给翻译逻辑加异常处理和空值校验

即使你确认Content列是字符串类型,也可能存在一些极端情况(比如超长文本、隐藏的空值、特殊字符)导致谷歌翻译返回空结果。自定义一个带异常捕获的翻译函数,能有效避免崩溃:

import pandas as pd
from googletrans import Translator

# 提前初始化翻译器,避免重复创建实例
translator = Translator()

def safe_translate(text):
    # 先过滤空值或无效文本
    if not isinstance(text, str) or pd.isna(text) or text.strip() == "":
        return ""
    try:
        # 执行翻译并返回文本结果
        translation = translator.translate(text, src='nl', dest='en')
        return translation.text
    except Exception as e:
        # 打印错误信息方便排查,同时返回空值避免中断
        print(f"翻译失败(文本片段:{text[:50]}...):{str(e)}")
        return ""

# 应用安全翻译函数到Content列
df_delpher['Content_en'] = df_delpher['Content'].apply(safe_translate)

3. 检查文本预处理是否有遗漏问题

你之前的标点移除逻辑df_delpher['Content'] = df_delpher['Content'].str.replace(r'[^\w\s]+', '')可能会把某些文本变成空字符串(比如全是标点的内容),虽然你处理了空值,但还是可以在翻译前再加一层过滤:

# 确保Content列都是非空字符串
df_delpher['Content'] = df_delpher['Content'].apply(lambda x: x.strip() if isinstance(x, str) else "")
# 再次移除空值行(可选)
df_delpher = df_delpher[df_delpher['Content'] != ""]

4. 备选方案:改用谷歌官方Cloud Translation API

如果googletrans始终不稳定,建议使用谷歌官方的翻译API——虽然需要付费,但可靠性拉满,不会出现接口失效的问题:

  • 先安装官方库:
    pip install google-cloud-translate
    
  • 配置谷歌云服务账号密钥(需要在谷歌云控制台创建)
  • 编写官方API的翻译函数:
    from google.cloud import translate_v2 as translate
    
    # 初始化官方翻译客户端
    translate_client = translate.Client.from_service_account_json('path/to/your/service-account-key.json')
    
    def official_translate(text):
        if not isinstance(text, str) or pd.isna(text) or text.strip() == "":
            return ""
        result = translate_client.translate(text, source_language='nl', target_language='en')
        return result['translatedText']
    
    df_delpher['Content_en'] = df_delpher['Content'].apply(official_translate)
    

先试试版本降级和安全翻译函数,大部分情况下都能解决问题;如果还是不行,再考虑切换到官方API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:09:06