python-3.x - KeyConditionExpression 接受无效输入并且不抛出异常
问题描述
我是 DynamoDB 的新手,并试图通过它的文档以及 boto3 来加强我已经编写了一些代码,这些代码应该查询几个表以获取不同的参数并进行一些计算。它可以工作,但是我还没有实现错误处理。我注意到的是,当我在 .eq(customerName) 中传递一个无效的 customerName 时,它不会引发任何相关错误,只是继续进行进一步的计算,这显然会失败。但是,如果我将 Key 从“CustomerName”更改为随机值,它会检测到这一点。如何检查通过 input 输入的 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)
解决方案
在键条件表达式中使用无效键名进行查询会引发异常,因为它是无意义的查询。
查询一个不存在的键值并不是一个错误——这对于您可能遇到的任何数据库来说都是如此。数据库没有任何依据可以得出该值“错误”的结论,因为对于根本找不到的值而言,这并不是一个有意义的概念。
response['Items']
包含匹配项的集合。如果没有找到记录,则它没有项目。您应该检查这种情况,如果没有找到记录是您认为意外的事情。