InvalidOperation:十进制的文字无效:你''

时间:2013-03-03 09:57:02

标签: django

当用户在每个信封中执行金钱分配时,有时他们忘记将金额放入其他信封中,结果为“0”。然后它将导致InvalidOperation。

如何解决此错误?或者系统如何只获得大于0的金额?

异常

Types:  InvalidOperation

Value:  Invalid literal for Decimal: u''
分配(应用程序)

中的信封/ views.py

            t2_payee = 'Envelope Transfer'



        for val in request.POST:

            if val[0:4] == "env_":

                env = Envelope.objects.get(pk=int(val[4:]))

                amt = Decimal(request.POST[val])


 <WSGIRequest
 path:/envelopes/allocate/6313/,
 GET:<QueryDict: {}>,
 POST:<QueryDict: {u'allocation_date': [u'2013-03-03'], u'month': [u'03'], 
      u'source': [u'6313'], u'year': [u'2013'], u'env_6316': [u''], 
      u'csrfmiddlewaretoken': [u'3kKoVymvIpbyhCknE1c3WH6YFznTaEoj'], 
      u'env_6315': [u'1'], u'env_6314': [u'0']}>,
 COOKIES:{'__utma': '136509540.132217190.1357543480.1362303551.1362307904.34',

'__ utmb':'1

2 个答案:

答案 0 :(得分:6)

在您的示例中,env_6316的值为空,Decimal不知道如何将其转换为数字。您应该检查val是否为空,如果是,则在转换为Decimal之前将其替换为0.

答案 1 :(得分:0)

我在运行SQL查询并尝试使用查询返回的数据构建Pandas数据帧时遇到此错误。对查询的更改为我解决了问题。我还尝试过CAST返回的列值,但最终,将:: FLOAT8追加到有问题的字段是我的唯一解决方案。

示例查询:

SELECT sum(dollars)::FLOAT8 FROM [table] WHERE ...
总和(美元)是导致我这个问题的领域。我的表中的类型是数字(10,6),大小是8。