使用OpenAI API(v0.28.0)时遇TypeError错误求助
问题排查:TypeError: string indices must be integers, not 'str'
错误原因
报错根源在提取翻译文本的代码行:translated_text = response.choices[0].message["content"]["body"]。在OpenAI 0.28.0版本的ChatCompletion响应结构中,message["content"]本身就是字符串类型的翻译结果,并非嵌套字典。对字符串使用["body"]这种字典索引操作,直接触发了类型错误。
修复方案
将错误的提取代码替换为直接获取message["content"]:
translated_text = response.choices[0].message["content"].strip()
完整修复后的代码
import requests from bs4 import BeautifulSoup from docx import Document import openai # 设置OpenAI API密钥 openai.api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 要爬取的网站URL website_url = "https://somesite.com" # 发送GET请求获取网页内容 response = requests.get(website_url) # 使用BeautifulSoup解析HTML soup = BeautifulSoup(response.content, "html.parser") # 提取长度超过100字符的文本块 text_blocks = [] for paragraph in soup.find_all("p"): text = paragraph.get_text().strip() if len(text) >= 100: text_blocks.append(text) # 使用OpenAI Chat API将文本块从英文翻译为德文 translated_text_blocks = [] for text_block in text_blocks: chat_input = f"Translate the following English text to German: '{text_block}'" response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": chat_input}, ], ) # 正确提取翻译后的文本 translated_text = response.choices[0].message["content"].strip() translated_text_blocks.append(translated_text) # 创建Word文档并保存翻译内容 document = Document() for translated_text in translated_text_blocks: document.add_paragraph(translated_text) document.save("translated_content.docx")
验证说明
修复后代码直接获取API返回的翻译字符串,避免对字符串执行字典索引操作,即可解决该TypeError。
内容的提问来源于stack exchange,提问作者Lumpi
相关产品推荐
相关产品推荐

