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

AWS Lambda报错UnboundLocalError:无法访问未赋值变量index_employee_image

AWS Lambda函数报错UnboundLocalError的解决

错误原因

你遇到的UnboundLocalError是因为**index_employee_image函数定义在lambda_handler内部且位于try-except代码块之后**。Python解释器执行代码时,会先运行try块里的response = index_employee_image(bucket, key),但此时该函数还未被定义,因此抛出“无法访问未关联值的局部变量”的错误。

修复方案

将index_employee_image和register_employee两个辅助函数移到lambda_handler外部,确保调用前函数已完成定义。

修复后的完整代码

import boto3

s3 = boto3.client('s3')
rekognition = boto3.client('rekognition', region_name = 'ap-southeast-1')
dynamodbTableName = 'employee'
dynamodb = boto3.resource('dynamodb', region_name='ap-southeast-1')
employeeTable = dynamodb.Table(dynamodbTableName)

def index_employee_image(bucket, key):
    response = rekognition.index_faces(
        Image ={ 
        'S3Object':
        {
            'Bucket':bucket,
            'Name': key,
        }
     },
        CollectionId = "employees"
    )
    return response

def register_employee(faceId, firstName, lastName):
    employeeTable.put_item(
        Item={
            'rekognitionId': faceId,
            'firstName': firstName,
            'lastName': lastName,
        }
    )

# 图片上传后,bucket名称和文件名会传入event参数
def lambda_handler(event, context):
    print(event)
    # 提取bucket名称和对象文件名
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']

    try:
        response = index_employee_image(bucket, key)
        print(response)
        if response['ResponseMetadata']['HTTPStatusCode'] == 200:
            faceId = response['FaceRecords'][0]['Face']['FaceId']
            # 从文件名提取姓名
            name = key.split('.')[0].split('_')
            firstName = name[0]
            lastName = name[1]
            register_employee(faceId, firstName, lastName)
            return response
    except Exception as e:
        print(e)
        print('处理存储桶{}中的员工图片{}时出错。'.format(bucket, key))
        raise e

额外检查项

  • 确认Rekognition的employees人脸集合已创建
  • 验证Lambda执行角色拥有S3读取、Rekognition索引人脸、DynamoDB写入的权限
  • 确保上传的图片文件名符合名_姓.后缀格式,避免split操作时出现索引越界错误

内容的提问来源于stack exchange,提问作者I Can Done

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:05:08