无法在Django / Python中将字符串转换为int

时间:2022-03-19 18:15:39

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.

我正在尝试将字符串转换为int,以便我可以保持运行总计,并希望能够在django模板中输出。

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: ''.

我已经尝试在stat.passing_completions周围添加int(),但之后只会抛出int()的错误无效文字,基数为10:''。

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

那么我使用isdigit()方法来确保只有具有数字的字符串试图像这样转换:

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

但是在渲染时我得到了Caught TypeError的错误:'int'对象不可迭代

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

3 个解决方案

#1


12  

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.

在字符串前面添加零保证我在字符串中至少有“0”。现在,可以肯定的是,您可以使用正则表达式从“'0'+ someString”中提取所有数字。

#2


3  

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:

我知道这是一个老问题,但如果有人需要,这里有一个小解决方案我用来将字符串转换为int而没有问题:

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

Just it. ;)

只是它。 ;)

#3


2  

You should check if stat.passing_completions is not an empty string. You could use:

您应该检查stat.passing_completions是否不是空字符串。你可以使用:

for player in players:
    player_stats = PlayerStat.objects.filter(player__id=player.pk)
    for n,stat in enumerate(player_stats):
        if n == 0 and stat.passing_completions:  # n is 0 and passing_completions is something meaningful
                passing_completions = int(stat.passing_completions)
        elif stat_passing_completions:  # n is not 0
            passing_completions += int(stat.passing_completions)
        else:
            pass  # in this case, stat.passing_completions is an empty string ('')

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

#1


12  

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.

在字符串前面添加零保证我在字符串中至少有“0”。现在,可以肯定的是,您可以使用正则表达式从“'0'+ someString”中提取所有数字。

#2


3  

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:

我知道这是一个老问题,但如果有人需要,这里有一个小解决方案我用来将字符串转换为int而没有问题:

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

Just it. ;)

只是它。 ;)

#3


2  

You should check if stat.passing_completions is not an empty string. You could use:

您应该检查stat.passing_completions是否不是空字符串。你可以使用:

for player in players:
    player_stats = PlayerStat.objects.filter(player__id=player.pk)
    for n,stat in enumerate(player_stats):
        if n == 0 and stat.passing_completions:  # n is 0 and passing_completions is something meaningful
                passing_completions = int(stat.passing_completions)
        elif stat_passing_completions:  # n is not 0
            passing_completions += int(stat.passing_completions)
        else:
            pass  # in this case, stat.passing_completions is an empty string ('')

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