从MSSQL读取的字符串在DeepL Python库中报错'text must not be empty'如何解决?
解决从MSSQL获取文本传入DeepL触发空文本错误的方案
1. 排查数据库字段是否为空或仅含空白字符
即便你确认变量类型是字符串,数据库中moretext字段仍可能是空字符串(""),或是全由空格、制表符、换行符这类空白字符组成——DeepL的translate_text会将这类内容判定为空文本抛出错误。
解决代码:
query = ("SELECT sometextstring, moretext FROM tablexy ") data = cursor.execute(query) for i in data: text = i[1].strip() # 移除文本首尾的空白字符 if not text: # 判定清理后是否为空 print(f"跳过空文本记录:{i[0]}") continue result = translator.translate_text(text, target_lang="EN-US") print(result)
2. 清理字符串中的不可见控制字符
部分数据库字段可能包含不可见控制字符(比如NULL字符\x00、换行符\n等),这类字符会让字符串表面非空,但仍会触发DeepL的空文本检测。
解决代码:
import string def clean_invalid_chars(text): # 仅保留可打印字符,移除所有控制字符 return ''.join(filter(lambda x: x in string.printable, text)).strip() query = ("SELECT sometextstring, moretext FROM tablexy ") data = cursor.execute(query) for i in data: raw_text = i[1] text = clean_invalid_chars(raw_text) if not text: print(f"跳过无效文本记录:{i[0]}") continue result = translator.translate_text(text, target_lang="EN-US") print(result)
3. 确认查询结果的索引是否正确
你通过i[1]获取moretext字段,要确保SELECT sometextstring, moretext的字段顺序无误——索引0对应sometextstring,索引1对应moretext,若顺序搞反,可能取到了预期外的空字段。
可以通过打印原始文本排查:
query = ("SELECT sometextstring, moretext FROM tablexy ") data = cursor.execute(query) for i in data: print(f"原始文本内容:{repr(i[1])}") # repr会显示转义字符,便于发现隐藏问题 text = i[1].strip() if not text: continue result = translator.translate_text(text, target_lang="EN-US") print(result)
4. 处理数据库中的NULL值
若数据库中moretext字段为NULL,Python游标返回的是None值。即便你认为类型是字符串,仍可能存在部分记录为None的情况,需要提前判断:
query = ("SELECT sometextstring, moretext FROM tablexy ") data = cursor.execute(query) for i in data: text = i[1] if text is None: print(f"跳过NULL值记录:{i[0]}") continue text = text.strip() if not text: continue result = translator.translate_text(text, target_lang="EN-US") print(result)
内容的提问来源于stack exchange,提问作者Deton8
相关产品推荐
相关产品推荐

