Python使用googletrans翻译Twitter数据集报NotValidPayload错误求助
错误根因定位
- 你当前的NaN值校验逻辑仅处理了空值场景,未覆盖
user_description字段长度超过5000字符的情况,这是触发报错的核心原因 - 全空白字符、不可见特殊字符也可能被翻译API判定为无效载荷,现有逻辑未做对应处理
修复后代码
import pandas as pd import pickle import time from deep_translator import GoogleTranslator batch_1 = no_eng_data.iloc[0:1000] batch_2 = no_eng_data.iloc[1000:2000] def batch_translation(batch): data_list = [] translator = GoogleTranslator(source='auto', target='en') for index, row in batch.iterrows(): # 预处理:处理NaN+清理空白+超长截断 text = row["user_description"] if pd.isna(text): data_list.append("") continue text = text.strip() if len(text) == 0: data_list.append("") continue # 超过5000字符就截断,保留前4990个字符留冗余 if len(text) > 5000: text = text[:4990] # 加异常捕获避免单条异常打断整个批次 try: translated = translator.translate(text=text) data_list.append(translated) except Exception as e: # 报错时保留原文本或者填空,可按需调整 data_list.append(text) # 单条请求间隔1秒,降低限流风险 time.sleep(1) return data_list data_list_1 = batch_translation(batch_1) with open('data_list_1.pkl', 'wb') as f: pickle.dump(data_list_1, f) # 批次间休眠可保留,时长按需调整 time.sleep(60)
优化建议
- 批次大小建议调整为100-200条,单批次运行时间更短,出错后重试成本更低
- 可以先对全量数据集的
user_description字段做统一预处理,再拆分批次,减少运行时的重复判断开销 - 可以对报错的文本单独存日志,后续可针对性处理特殊内容
内容的提问来源于stack exchange,提问作者Lippi
相关产品推荐
相关产品推荐

