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

删除DynamoDB表项触发decimal.Inexact异常,求修复方案

解决DynamoDB删除数据时的decimal.Inexact异常

嘿,我来帮你搞定这个问题!你遇到的decimal.Inexact: [<class 'decimal.Inexact'>, <class 'decimal.Rounded'>]异常,核心原因是直接用浮点数初始化Decimal类型导致的精度问题。

问题根源

浮点数是基于二进制存储的,没法精确表示像44.30912302164986这类十进制小数——当你把浮点数传给Decimal()时,实际传入的是这个浮点数近似后的二进制值,转成Decimal时就会因为精度不匹配触发Inexact和Rounded异常,同时这也会导致你传入的rangekey和DynamoDB表中存储的数值无法精确匹配,进而影响删除操作。

修复方案

用字符串形式的数值来初始化Decimal对象,这样能保证十进制数的精度完全保留,和DynamoDB中存储的数值精确匹配。

修改你的代码如下:

dynamodb = boto3.resource('dynamodb', region_name='***')
table = dynamodb.Table('***')
propid = 1234
# 用字符串初始化Decimal,避免浮点数精度损失
column_set = Decimal("44.30912302164986")
print("Attempting a conditional delete...")
try:
    response = table.delete_item(
        Key={
            'hashkey': propid,
            'rangekey': column_set
        }
        # 若有条件表达式,里面的Decimal值也要用字符串初始化
    )
    print("Delete successful!")
except Exception as e:
    print(f"Error: {e}")

额外提醒

如果你的delete_item中包含条件表达式(比如ConditionExpression),其中涉及的所有Decimal数值,都要采用字符串初始化的方式,避免再次触发同类异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:16:15