You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure函数字典异常:重复添加相同键location1

问题原因与解决方案

核心原因

Azure函数采用无服务器实例复用机制:同一个函数实例的进程会被保留一段时间(即使你离开页面),如果你的字典是定义在函数外部的全局/类级变量,每次调用函数时都会复用这个已存在的字典,不会重新初始化。第一次调用时字典是空的,添加键没问题;第二次调用时字典里还保留着第一次的键,再添加相同键就会触发「已添加相同键」的错误。本地VS运行时每次都是新进程,所以不会有这个问题。

解决方法

1. 把字典移到函数内部初始化(推荐)

确保每次调用函数时都创建新的字典,彻底避免复用问题:

# 示例(以Python为例,其他语言逻辑一致)
def main(req: func.HttpRequest) -> func.HttpResponse:
    # 每次调用都重新初始化字典
    result_dict = {}
    # 处理参数并添加键值对
    result_dict["location1"] = req.params.get("location1")
    result_dict["location2"] = req.params.get("location2")
    # ...后续逻辑

2. 若需保留全局变量,每次调用前清理或判断键存在性

如果因为业务需要必须使用全局字典,每次调用时先清空字典,或者添加键前先判断是否存在:

# 全局字典(仅在必要时使用)
result_dict = {}

def main(req: func.HttpRequest) -> func.HttpResponse:
    # 方法A:调用前清空字典
    result_dict.clear()
    result_dict["location1"] = req.params.get("location1")
    
    # 方法B:判断键是否存在,不存在再添加,存在则更新
    loc1_value = req.params.get("location1")
    if "location1" in result_dict:
        result_dict["location1"] = loc1_value
    else:
        result_dict["location1"] = loc1_value
    # ...后续逻辑

3. 验证实例回收效果(临时排查用)

如果想确认是实例复用导致的,可以手动重启函数应用(Azure门户→函数应用→概述→重启),重启后第一次调用会恢复正常,但这只是临时解决,本质还是要修正变量初始化逻辑。

内容的提问来源于stack exchange,提问作者LJHHouston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:52:36