当用户在每个信封中执行金钱分配时,有时他们忘记将金额放入其他信封中,结果为“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
答案 0 :(得分:6)
在您的示例中,env_6316的值为空,Decimal不知道如何将其转换为数字。您应该检查val是否为空,如果是,则在转换为Decimal之前将其替换为0.
答案 1 :(得分:0)
我在运行SQL查询并尝试使用查询返回的数据构建Pandas数据帧时遇到此错误。对查询的更改为我解决了问题。我还尝试过CAST返回的列值,但最终,将:: FLOAT8追加到有问题的字段是我的唯一解决方案。
示例查询:
SELECT sum(dollars)::FLOAT8 FROM [table] WHERE ...
总和(美元)是导致我这个问题的领域。我的表中的类型是数字(10,6),大小是8。