web-dev-qa-db-fra.com

"Littéral invalide pour int () avec base 10:" Qu'est-ce que cela signifie réellement?

Débutant ici! J'écris un code simple pour compter le nombre de fois qu'un élément apparaît dans une liste (par exemple, count([1, 3, 1, 4, 1, 5], 1) renverrait 3).

C'est ce que j'avais à l'origine:

def count(sequence, item):
    s = 0
    for i in sequence:
       if int(i) == int(item):
           s += 1
    return s

Chaque fois que j'ai soumis ce code, je me suis

"Littéral invalide pour int () avec base 10:"

Depuis, j'ai compris que le code correct est:

def count(sequence, item):
    s = 0
    for i in sequence:
       if **i == item**:
           s += 1
    return s

Cependant, je suis simplement curieux de savoir ce que cette déclaration d'erreur signifie. Pourquoi ne puis-je pas simplement laisser dans int()?

4
Andrew

L'erreur est "Littéral invalide pour int () avec base 10:". Cela signifie simplement que l'argument que vous avez passé à int ne ressemble pas à un nombre. En d'autres termes, il est vide ou comporte un caractère autre qu'un chiffre.

Ceci peut être reproduit dans un shell en python.

>>> int("x")
ValueError: invalid literal for int() with base 10: 'x'
8
recursive

Vous pouvez essayer quelque chose comme ceci si des lettres, par exemple, apparaissent dans votre séquence:

from __future__ import print_function

def count_(sequence, item):
    s = 0
    for i in sequence:
        try:
            if int(i) == int(item):
                s = s + 1
        except ValueError:
            print ('Found: ',i, ', i can\'t count that, only numbers', sep='')
    return s

print (count_([1,2,3,'S',4, 4, 1, 1, 'A'], 1))
0
udarH3