python:获取ValueError:对于带有基数为10的int()的无效文字:”错误并且不知道原因

Getting a ValueError: invalid literal for int() with base 10: '' error and don't know why

我知道以前有人问过这个问题,但就我的情况而言,我似乎不明白为什么要扔这个。

当我尝试运行我的计算时,控制台会给我这个错误:

ValueError: invalid literal for int() with base 10: ''

它说它来自

1
2
File"/var/sites/live_mbpathways/moneybroker/apps/investments/ajax.py", line 30, in calc_cdic
    investments = Investment.objects.all().filter(plan = plan, financial_institution=fiid, maturity_date__gte = now).order_by('maturity_date').exclude(id=investment_id)

有人知道为什么会这样吗?

这是我的ajax.py代码所在的位置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@login_required
@moneybroker_auth
@csrf_exempt
def calc_cdic(request, plan, investment_id=None, *args, **kwargs):
    from investments.models import Investment
    from financial_institutions.models import FinancialInstitution
    from profiles.models import Profile
    from plans.models import Plan
    from datetime import datetime
    now = datetime.now()
    json = {}
    data = request.POST

    if request.is_ajax():
        total = 0
        fiid = data.get('financial_institution')
        amt = data.get('amount') or 0
        pay_amt = data.get('pay_amount') or 0
        mat_amt = data.get('maturity_amount') or 0
        investments = Investment.objects.all().filter(plan = plan, financial_institution=fiid, maturity_date__gte = now).order_by('maturity_date').exclude(id=investment_id)
        for i in investments:
            total += i.maturity_amount
        print total
        json['total'] = float(str(total))
        json['amt'] = float(str(amt))
        json['pay_amt'] = float(str(pay_amt))
        json['mat_amount'] = float(str(mat_amt))
        json['fiid'] = fiid
        print json

    return HttpResponse(simplejson.dumps(json), mimetype='application/json')


int()函数正在引发异常,因为您试图转换的对象不是数字。

我建议您可以考虑使用调试print语句来了解计划和fiid的初始值以及它们是如何变化的。

您可以做的另一件事是使用try/catch包装对int()的调用

1
2
3
4
5
val='a'
try:
    int_val = int(val)
except ValueError:
    print("Failure w/ value" + val)

在调用链的某个地方,您传递的是一个空字符串,然后代码试图将其转换为整数。记录您的输入以便跟踪。


对于我来说,我必须删除迁移文件夹,并按照此链接中最上面的答案中的步骤进行操作,然后重新运行迁移,然后错误就消失了,并且成功了。


建议您查看planfiid的值,因为planfiid未设置为您认为的值。