[已解决]float值写入不了
-
两个主要的代码,在val的时候获取都是正确的,但是create后,qty值没有写入,找不到原因啊。
qty = 0 if -1 == qty_index else row_data[qty_index] if isinstance(qty, (int, float)): qty = float(qty)
val = { "template_id": template_id, "part_number": part_number_id, "description": desc, "qty": qty, "unit": unit_id, "demand": demand, "supplier_id": supplier_id, "remarks": remarks, 'bom_qty': bom_qty, 'delivery_status': delivery_status, 'page': page, } self.env['upi.template.line'].create(val)
-
-
@hui
你贴出来的代码实在有限而且格式混乱,很难猜测。- 大致思路,先看一下qty字段在数据库里是否正常创建了
isinstance
判断并不好,因为如果你运行的是python2.x,那么整数还有一个长整数类型long
, 另外可以被转换为浮点类型的字符串和自定义对象也会被isinstance
排除。python中应该尽量使用duck typing的概念,即:“只要它叫的像个鸭,走得像个鸭,我们就当它个鸭子,不必解剖判断它是不是个鸭子类型”
所以上面的
isinstance
的写法,可以改成:try: qty = float(qty) except ValueError: log("Can't convert to float, value type is incorrect!")
-
-
@hui 在 float值写入不了 中说:
@digitalsatori 在 float值写入不了 中说:
自定义对象也会被isinstance排除
这句什么意思?
当然与你现在的问题不一定相关,但是比如我自定义了一个类:
ExtendedInt
用来扩展python的基础类int
, 这个类具有所有int
的功能和特征,也可以转换为float
类型:class ExtendedInt(Int): pass a = ExtendedInt(8) float(a) ---> 8.0 isinstance(a, int) ----> False
所以用isinstance去判断类型,然后做类型转换的话, 这个a对象就被排除在类型转换之外了。
还有因为python算弱类型语言,我不能给默认值的。
错了。
Python是动态类型语言,同时也是强类型语言
比如像js这样的弱类型语言可以这样来搞'x' + 100 ---> 'x100'
python是不可以的,必须要进行显示的类型转换
-
@digitalsatori
Python是动态类型语言,同时也是强类型语言我的意思是比如qty是float类型的,我不能默认给个qty=0(这个是在插入数据库数据的时候,qty的值可以是‘’),后续可能获取到一个空字符串,就把0给顶掉了。
-
你现在的具体问题是什么?是不管qty设了什么值,创建记录后qty都是0吗?
-
你能确定你的row_data列表里的数据是
int
或float
两种吗?
你有试过不做isinstance
判断,直接用try ... except ...
吗? -
@digitalsatori
我原先认为我的row_data
的数据是int
或float
两种,实际上还有str
类型的,所以我的错误找到了,是出现如果是str
类型的,我都给写成qty=0了。试过不做
isinstance
判断,直接用try...except...
的话,如果qty=‘’
的话就会触发异常的,需要给这个排除才可以的。暂时就想到这些。