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

Lambda函数提取字段异常:双词州名无法正确解析求助

Lambda函数解析双词州名失败的修复方案

我尝试通过Lambda函数提取State(州)、Size(规模)、Department(部门)三个值,当前代码在州名为单单词(如Pennsylvania)时可正常运行,但遇到双词州名(如New York)时解析失败。已尝试使用if-else结合字符串分割的方式处理,但问题仍未解决,相关代码如下:

import json

def lambda_handler(event, context):
    print('## EVENT')
    print(event)
    #salesoutput=event['Details']['ContactData']['Attributes'].get('salesoutput',"Not Available")
    salesoutput= "New York 15 Nuts"
    #salesoutput= "Pennsylvania 15 Nuts"

    if  len(salesoutput.split()) > 3:
        prestate1 = salesoutput.split(' ')[0]
        prestate2 = salesoutput.split(' ')[1]
        State = prestate1 + " " + prestate2
        Size = salesoutput.split(' ')[2]
        Department = salesoutput.split(' ')[3]    
#        print("State:",State,"\nDistrict Size:",Size,"\nDepartment:",Department)
    
    else:
        State = salesoutput.split(' ')[0]
        Size = salesoutput.split(' ')[1]
        Department = salesoutput.split(' ')[2]    
#        print("State:",State,"\nDistrict Size:",Size,"\nDepartment:",Department)
    
def describe(Response):
    return State(Response), District(Response), Size(Response)

原代码存在的问题

  1. 变量作用域错误:lambda_handler内定义的State、Size等是局部变量,describe函数无法直接访问,会引发未定义错误。
  2. 函数调用逻辑错误:describe函数里把State、Size当作函数调用,但它们是变量,而非函数,会触发类型错误。
  3. 分割逻辑不健壮:仅通过split后的元素数量判断州名长度,无法兼容三词州名的情况,且依赖固定位置索引,灵活性差。

修复方案

利用Size是数值类型的特性反向分割,不管州名是1个、2个还是更多词,都能正确提取:

import json

def lambda_handler(event, context):
    print('## EVENT')
    print(event)
    # 从事件中获取salesoutput,未获取到则返回默认值
    salesoutput = event['Details']['ContactData']['Attributes'].get('salesoutput', "Not Available")
    # 测试用例
    # salesoutput = "New York 15 Nuts"
    # salesoutput = "Pennsylvania 15 Nuts"
    # salesoutput = "New Mexico 20 Snacks"
    
    parts = salesoutput.split()
    size_index = None
    
    # 遍历找到第一个数字的位置(即Size的索引)
    for idx, part in enumerate(parts):
        if part.isdigit():
            size_index = idx
            break
    
    # 处理无有效数字的异常情况
    if size_index is None:
        state = "Not Available"
        size = "Not Available"
        department = "Not Available"
    else:
        # 数字前的所有内容拼接为州名
        state = ' '.join(parts[:size_index])
        size = parts[size_index]
        # 数字后的所有内容拼接为部门(兼容多词部门名)
        department = ' '.join(parts[size_index+1:])
    
    print(f"State: {state}\nDistrict Size: {size}\nDepartment: {department}")
    return describe(state, size, department)

# 调整describe函数参数,直接接收提取后的三个值
def describe(state, size, department):
    return state, size, department

方案优势

  • 兼容任意长度的州名(单词、双词、多词)
  • 支持多词形式的部门名称
  • 自动处理无有效数字的异常场景
  • 修复了原代码的作用域和函数调用错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:50:25