2

当用户在每个信封中执行货币分配时,有时他们忘记将金额放入其他信封中,结果为“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

4

2 回答 2

6

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

于 2013-03-03T12:35:49.553 回答
0

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

示例查询:

SELECT sum(dollars)::FLOAT8 FROM [table] WHERE ...

sum(dollars) 是对我造成问题的领域。我表中的类型是数字(10,6),大小是 8。

于 2015-01-12T20:45:39.470 回答