Azure Function App报错:'str'对象无get属性,请求技术支援
解决Azure Function中AttributeError: 'str' object has no attribute 'get'问题
问题根源
报错的核心原因是:遍历workItemDetails时,其中的item并非预期的字典类型,而是字符串。字符串没有.get()方法,因此触发该AttributeError。
排查步骤
- 添加日志确认数据类型
在循环开头插入日志代码,打印每个item的类型和内容,明确问题所在:for item in workItemDetails: print(f"Item类型: {type(item)}, Item内容: {item}") # 新增日志 openai_prompt = openAIPrompt(item) # 后续原有代码 - 检查
workItemDetails的数据源- 若从HTTP请求获取:确认是否用
req.get_json()正确解析JSON,而非直接读取字符串格式的请求体 - 若从存储/数据库读取:确认读取后是否执行了
json.loads()反序列化,避免将字典列表以字符串形式传入 - 排查近期代码变更:确认是否修改了
workItemDetails的生成逻辑,导致原本的字典列表变成字符串或字符串列表
- 若从HTTP请求获取:确认是否用
解决方案
根据排查结果对应处理:
场景1:整个workItemDetails是JSON字符串
如果传入的参数本身是JSON格式的字符串(比如上游误将字典列表序列化成了字符串),先做反序列化处理:
def sendOpenAIPromptRequest(azureopenai_endpoint, azureopenai_deployment,azureopenai_token, azureopenai_version, workItemDetails): # 新增:判断是否为字符串,是则反序列化为字典列表 if isinstance(workItemDetails, str): import json workItemDetails = json.loads(workItemDetails) workItemSummary = [] # 后续原有代码
场景2:列表内每个元素是JSON字符串
如果workItemDetails是列表,但每个元素是单独的JSON字符串,在循环内逐个反序列化:
for item in workItemDetails: # 新增:判断当前item是否为字符串,是则反序列化为字典 if isinstance(item, str): import json item = json.loads(item) openai_prompt = openAIPrompt(item) # 后续原有代码
场景3:修正上游数据源逻辑
如果是上游生成workItemDetails时出现序列化错误(比如接口返回、数据存储环节误处理),直接修改上游代码,确保传递的是字典列表而非字符串或字符串列表。
额外优化建议
- 避免捕获所有异常:替换空
except:为特定异常捕获,防止掩盖其他问题:try: # 原有请求代码 except requests.exceptions.RequestException as e: print(f"OpenAI请求失败: {str(e)}") continue # 跳过当前item,继续处理下一个(根据业务需求调整) except json.JSONDecodeError as e: print(f"响应JSON解析失败: {str(e)}") continue - 容错处理OpenAI响应:避免因响应格式变化导致报错:
# 替换原有直接取值逻辑 summary = "" if responseContent.get('choices') and len(responseContent['choices']) > 0: message = responseContent['choices'][0].get('message', {}) summary = message.get('content', "") container = { "UserStoryId": item.get("UserStoryId", ""), "UserStoryTitle": item.get("UserStoryTitle", ""), "UserStoryState":item.get("UserStoryState", ""), "UserStoryType": item.get("UserStoryType", ""), "Summary": summary }
内容的提问来源于stack exchange,提问作者LaggyFingers
相关产品推荐
相关产品推荐

