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

20,586

Solution 1

The int() function is throwing an exception because you are trying to convert something that is not a number.

I suggest that you might consider using debugging print statements to find out what plan's and fiid's are initally and how they change.

Another thing you can do is wrap the call to int() using try/catch

val='a'
try:
    int_val = int(val)
except ValueError:
    print("Failure w/ value " + val)

Solution 2

Somewhere in that chain of calls, you're passing an empty string which the code is then trying to convert to an integer. Log your input at the time to track it down.

Share:
20,586
TheLifeOfSteve
Author by

TheLifeOfSteve

Application Developer from Wallaceburg, Ontario

Updated on June 03, 2020

Comments

  • TheLifeOfSteve
    TheLifeOfSteve almost 4 years

    I know this has been asked before, but for my circumstance, I can't seem to figure out why this is being thrown

    When I try to run my calculations, I am given this error from my console:

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

    and it is saying its coming from

    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)
    

    Does anyone know why this could be happening?

    Here is my ajax.py where that code is located:

    @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')