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)
原代码存在的问题
- 变量作用域错误:
lambda_handler内定义的State、Size等是局部变量,describe函数无法直接访问,会引发未定义错误。 - 函数调用逻辑错误:
describe函数里把State、Size当作函数调用,但它们是变量,而非函数,会触发类型错误。 - 分割逻辑不健壮:仅通过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
相关产品推荐
相关产品推荐

