Python2.7下VoltProcedure.call() Decimal类型报TypeError的解决办法
Fix TypeError: an integer is required for Python 2.7 Decimal datatype in VoltProcedure.call()
我之前也碰到过一模一样的问题!在Python 2.7环境下,voltdbclient对Decimal类型的处理逻辑和Python 3.x版本有差异,它内部期望接收的是整数或者可直接解析为数值的字符串,而不是Decimal对象本身,这就是为什么你会触发TypeError。
快速修复方案
根据你的Decimal数值类型,选择下面两种方法之一:
1. 若Decimal是整数型(比如示例中的Decimal(129))
直接将Decimal对象转为整数后传入:
proc.call([int(Decimal(129))])
2. 若Decimal包含小数部分(比如Decimal('129.99'))
将Decimal转为字符串传入,这样VoltDB能正确解析为DECIMAL类型:
proc.call([str(Decimal('129.99'))])
背后的原因
Python 2.7版本的voltdbclient在处理VOLTTYPE_DECIMAL参数时,没有做Decimal对象的适配逻辑,直接尝试按整数类型去处理参数;而Python 3.x的客户端库已经更新了这部分逻辑,能够直接识别Decimal对象,所以在3.x环境下可以正常运行。
如果方便的话,你也可以尝试升级Python 2.7对应的voltdbclient版本,看看官方是否已经修复了这个兼容性问题,但上面的两种转换方法是最直接且无需依赖版本升级的解决方案。
内容的提问来源于stack exchange,提问作者Ckll
相关产品推荐
相关产品推荐

