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

使用googletrans时如何解决TypeError: JSON对象需为str等而非NoneType错误

解决googletrans翻译时的TypeError问题

错误根源

TypeError: the JSON object must be str, bytes or bytearray, not NoneType 本质是googletrans 4.0.0rc1版本与Google翻译的公共API接口不兼容,请求后返回空值(None)导致JSON解析失败。此外还有几个可能的触发因素:

  • 部分i.txt文件内容为空,传递空字符串触发异常
  • Google翻译的服务URL被Colab环境拦截
  • 批量请求频率过高被反爬限制

修复方案

1. 更换兼容的翻译库(优先推荐)

放弃googletrans 4.0.0rc1,改用维护更活跃的分支版本googletransx,它修复了原库的API兼容问题:

!pip install googletransx
import os
from googletransx import Translator

translator = Translator()
os.makedirs("translation", exist_ok=True)

# 后续文件读取和翻译逻辑保持框架不变,仅替换库导入部分

2. 修复原代码的漏洞并添加容错机制

如果坚持使用原版本,需要修复文件读取错误、添加空内容过滤和请求重试:

!pip install googletrans==4.0.0rc1
import os
import time
from googletrans import Translator

translator = Translator(service_urls=[
      'translate.google.com',
      'translate.google.co.jp',  # 替换为更稳定的服务地址
])

messages = []
DATA_PATH = '/content/'
os.makedirs("translation", exist_ok=True)  # 提前创建输出文件夹

for i in range(100):
    try:
        # 用with语句自动管理文件句柄,避免泄漏
        with open(f'{DATA_PATH}{i}.txt', "r", encoding="utf-8") as file:
            # 修复换行符处理错误:原代码用strip('\\n')是错误的,应为strip('\n')
            msg = ' '.join([l.strip('\n') for l in file.readlines()]).strip()
            messages.append(msg)
    except FileNotFoundError:
        messages.append("")
        print(f"警告:文件{i}.txt不存在")

for i in range(100):
    msg = messages[i]
    if not msg:
        # 空内容直接写入空文件
        with open(os.path.join("translation", f"{i}.txt"), "w") as file:
            file.write("")
        continue
    
    # 添加重试机制,应对请求失败或限制
    max_retries = 3
    for retry in range(max_retries):
        try:
            result = translator.translate(msg, dest='en')
            with open(os.path.join("translation", f"{i}.txt"), "w", encoding="utf-8") as file:
                file.write(result.text)
            break
        except TypeError as e:
            print(f"翻译{i}.txt失败,重试第{retry+1}次")
            time.sleep(2)  # 重试前等待2秒,降低频率
    else:
        print(f"{i}.txt翻译3次失败,已跳过")

3. 关键错误点修正

原代码中l.strip('\\n')是错误写法,实际文件中的换行符是\n,而非转义后的\\n,这会导致文本处理异常,甚至生成空字符串触发后续错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:28