KeyConditionExpression接受无效的输入,并且不会引发异常

时间:2019-09-25 10:41:46

标签: python-3.x error-handling amazon-dynamodb boto3

我是DynamoDB的新手,正在尝试通过其文档以及boto3增强功能 我编写了一些代码,该代码应该查询几个表以获取不同的参数并进行一些计算。它有效,但是我尚未实现错误处理。 我注意到的是,当我在.eq(customerName)中传递无效的customerName时,它不会引发任何相关错误,而是继续进行进一步的计算,这显然会失败。 但是,如果我将Key从'CustomerName'更改为随机值,它将检测到。 如何检查通过输入输入的customerName是否存在,如果不存在,则抛出错误?该try-except无法捕获它。我遇到了attribute_not_exists,其逻辑上与我要实现的目标相似,但是它不需要键。

    try:
        response = table.query(
            KeyConditionExpression=Key('customerName').eq(customerName),
            ProjectionExpression='price',
            )

            # some code

    except ClientError as err:
        logger.info(f"The customer {customerName} doesn't exist: {err}")
        sys.exit(1)

1 个答案:

答案 0 :(得分:0)

在键条件表达式中使用无效的键名称进行查询会引发异常,因为这是无意义的查询。

查询不存在的键值不是一个错误-实际上,您可能会遇到的任何数据库都是如此。数据库没有任何依据可得出结论,即该值是“错误的”,因为对于一个根本找不到的值来说,这并不是一个有意义的概念。

response['Items']包含一组匹配项。如果未找到任何记录,则没有任何项目。如果没有找到记录,您应该检查这种情况,认为这是意外的。