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

