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

Python googletrans模块随机报错:原因分析与解决方案

googletrans 翻译异常问题:原因分析与修复方案

问题现象

使用googletrans 4.0.0rc1版本时,翻译请求存在不稳定问题:

  • 随机出现TypeError: the JSON object must be str, bytes or bytearray, not NoneType错误,导致翻译失败
  • 当输入文本仅包含空格时,会抛出IndexError: list index out of range错误

复现代码

import time

from googletrans import Translator as google_Translator

class Translator:
    lang: str
    def __init__(self, lang: str  = 'en'):
        self.lang = lang

    def go(self, text: str):
        try:
            translator = google_Translator()
        except Exception as e:
            print("First exception type: ", e)
            print("Argument: ", text)
            print("lang: ", self.lang)
            print("translator: ", translator)
            return None

        try:
            t1 = translator.translate(text, dest=self.lang)
        except Exception as e:
            print("Second exception type: ", e)
            print("Argument: '%s'" % text)
            print("lang: ", self.lang)
            print("translator: ", translator)
            return None

        try:
            t2 = t1.text
        except Exception as e:
            print("Third exception type: ", e)
            print("argument: ", text)
            print("lang: ", self.lang)
            print("translator: ", translator)
            return None

        return t2

if __name__ == '__main__':
    t = Translator('English')
    while True:
        print("\n---\n%s\n---\n" % t.go('Mieux Comprendre, Mieux Décider, Mieux Soigner'))
        time.sleep(5)

错误示例输出

---
Better understand, decide better, better care
---


---
Better understand, decide better, better care
---

Second exception type:  the JSON object must be str, bytes or bytearray, not NoneType
Argument: 'Mieux Comprendre, Mieux Décider, Mieux Soigner'
lang:  English
translator:  <googletrans.client.Translator object at 0x109e96d40>

---
None
---

环境信息

(venv)$ python3 --version
Python 3.10.11
(venv)$ python3 -m pip show googletrans
Name: googletrans
Version: 4.0.0rc1
Summary: Free Google Translate API for Python. Translates totally free of charge.
Home-page: https://github.com/ssut/py-googletrans
Author: SuHun Han
Author-email: ssut@ssut.me
License: MIT
Location: ~/venv/lib/python3.10/site-packages
Requires: httpx
Required-by: 

原因分析

  1. 预发布版本bug:googletrans 4.0.0rc1是候选预发布版本,内部解析Google Translate响应的逻辑存在缺陷。当Google临时调整响应格式,或请求被限流/拦截时,库无法正确解析返回内容,导致JSON解析失败抛出NoneType错误。
  2. 边缘输入未处理:当输入文本仅为空白字符时,Google Translate的返回结构与正常文本不同,库的解析代码未适配这种情况,直接访问列表索引导致越界。
  3. 实例重复创建:每次调用翻译方法都新建google_Translator实例,既降低效率,也会增加被Google限流的概率——独立实例无法复用连接池,请求特征更易被识别拦截。
  4. 语言参数不规范:代码中使用'English'作为目标语言参数,虽然库能兼容部分自然语言名称,但标准用法应为语言代码(如'en'),不规范参数可能引发潜在解析问题。

修复方案

方案一:切换到稳定版或替代库

放弃bug较多的4.0.0rc1版本,安装稳定版:

pip uninstall googletrans -y
pip install googletrans==3.0.0

若稳定版仍有问题,可使用更成熟的替代库(如googletransx),或使用官方付费的Google Cloud Translate API(稳定性更高)。

方案二:修复现有代码问题

  1. 复用翻译器实例:在类初始化时创建一次google_Translator实例,避免重复创建
  2. 规范语言参数:使用标准语言代码(如'en')替代自然语言名称
  3. 处理空白输入:提前过滤空白文本,避免触发边缘异常
  4. 简化异常处理逻辑

修改后的代码:

import time
from googletrans import Translator as google_Translator

class Translator:
    lang: str
    translator: google_Translator

    def __init__(self, lang: str = 'en'):
        self.lang = lang
        self.translator = None
        try:
            self.translator = google_Translator()
        except Exception as e:
            print("翻译器初始化失败:", e)

    def go(self, text: str):
        if not self.translator:
            return None
        
        # 处理空白输入
        stripped_text = text.strip()
        if not stripped_text:
            return ""
        
        try:
            result = self.translator.translate(stripped_text, dest=self.lang)
            return result.text
        except Exception as e:
            print("翻译失败:", e)
            print("输入文本:", repr(text))
            print("目标语言:", self.lang)
            return None

if __name__ == '__main__':
    t = Translator('en')
    while True:
        print("\n---\n%s\n---\n" % t.go('Mieux Comprendre, Mieux Décider, Mieux Soigner'))
        time.sleep(5)

方案三:添加重试机制

针对临时网络波动或限流导致的失败,可添加重试逻辑提升稳定性(需先安装tenacity库:pip install tenacity):

import time
from tenacity import retry, stop_after_attempt, wait_exponential
from googletrans import Translator as google_Translator

class Translator:
    lang: str
    translator: google_Translator

    def __init__(self, lang: str = 'en'):
        self.lang = lang
        self.translator = None
        try:
            self.translator = google_Translator()
        except Exception as e:
            print("翻译器初始化失败:", e)

    @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
    def _translate(self, text):
        return self.translator.translate(text, dest=self.lang).text

    def go(self, text: str):
        if not self.translator:
            return None
        
        stripped_text = text.strip()
        if not stripped_text:
            return ""
        
        try:
            return self._translate(stripped_text)
        except Exception as e:
            print("多次尝试后翻译失败:", e)
            return None

if __name__ == '__main__':
    t = Translator('en')
    while True:
        print("\n---\n%s\n---\n" % t.go('Mieux Comprendre, Mieux Décider, Mieux Soigner'))
        time.sleep(5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:02:24