Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble converting string to int in Django/Python

I'm trying to convert a string into an int so that I can keep a running total and would like to be able to output in the django template.

def stats(request):
    stats = []
    players = Player.objects.all()

    for player in players:
        player_stats = PlayerStat.objects.filter(player__id=player.pk)
        for n,stat in enumerate(player_stats):
            if n == 0: 
                    passing_completions = stat.passing_completions
            else:
                passing_completions += stat.passing_completions

        stats.append((player.first_name, player.last_name, player.team, passing_completions))

    return render_to_response('preps/stats.html', {'stats': stats, })

I've tried adding int() around stat.passing_completions but then that just throws the error invalid literal for int() with base 10: ''.

So then I used the isdigit() method to make sure only strings with digits were trying to be converted like this:

for player in players:
    player_stats = PlayerStat.objects.filter(player__id=player.pk)

    for n,stat in enumerate(player_stats):
        if n == 0: 
            if stat.passing_completions.isdigit():
                passing_completions = int(stat.passing_completions)
        else:
            if stat.passing_completions.isdigit():
                passing_completions += int(stat.passing_completions)

    stats.append((player.first_name, player.last_name, player.team, passing_completions))

but then I get the error of Caught TypeError while rendering: 'int' object is not iterable

model Structure

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    week_num = models.CharField(
        max_length = 10,
        choices = (('1', 'Sep 2nd',), ('2', 'Sep 9th',), ('3', 'Sep 16th',),('4', 'Sep 23rd',), ('5', 'Sep 30th',), ('6', 'Nov 2nd',),('7', 'Nov 7th',), ('8', 'Nov 14th',), ('9', 'Nov 21st',),('10', 'Nov 28th',), ('11', 'Dec 4th',), ('12', 'Dec 11th',), ),
        blank = True,
        null=True
        )
    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards",
        blank=True
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns",
        blank=True
        )
    passing_completions = models.CharField(
        max_length = 100,
        verbose_name = "Passing Completions",
        blank=True
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts",
        blank=True
        )
    passing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Passing Yards",
        blank=True
        )
    passing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Passing Touchdowns",
        blank=True
        )
    receptions = models.CharField(
        max_length = 100,
        verbose_name = "Receptions",
        blank=True
        )
    receiving_yards = models.CharField(
        max_length = 100,
        verbose_name = "Receiving Yards",
        blank=True
        )
    receiving_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Receiving Touchdowns",
        blank=True
        )

Any help would be appreciated.

Thanks

like image 495
bigmike7801 Avatar asked Sep 16 '11 17:09

bigmike7801


2 Answers

I sometimes use this stupid trick :

 a = int('0' + someString)

Adding a zero in front of a string guaranties me to have at least "0" in the string. Now, to be sure, you may extract all the digits from the "'0'+someString" with a regular expression.

like image 166
Louis Avatar answered Sep 22 '22 06:09

Louis


I know this is an old question, but if someone needs, here is a small solution I use to convert strings to int without problems:

def int_or_0(value):
    try:
        return int(value)
    except:
        return 0

Just it. ;)

like image 31
Jayme Tosi Neto Avatar answered Sep 20 '22 06:09

Jayme Tosi Neto