2010-12-19 4 views
3
>>> n = ''.join(i for i in x if i.isdigit()) 
>>> n.isdigit() 
True 
>>> x.isdigit() 
False 

>>> previous = 0 
>>> next = 100 
>>> answer = 0 


>>> for i in range(0,100): 
...  answer += int(n[previous:next]) 
...  previous = next 
...  next += 100 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
ValueError: invalid literal for int() with base 10: '' 

Pourquoi ai-je cette erreur? Comme vous pouvez le voir n est le chiffre ..Littéral invalide pour int avec base 10: ''

Répondre

7

n peut être numérique, mais à un certain stade, vous allez passé la longueur de n telle que n[previous:next] ne contient aucun caractère du tout. La chaîne vide '' ne peut pas être convertie en int, d'où l'erreur qui raconte toute l'histoire: invalid literal for int() with base 10: ''.

>>> int('') 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '' 
+0

Eh bien, comme vous pouvez le voir, je l'ai-je retiré tout de la chaîne, mais les chiffres n = « » .join (i pour i dans x si i.isdigit()), ne pas faire le travail ? – Marijus

+0

@Marijus La suppression de non-chiffres ne vous empêchera pas d'obtenir une chaîne vide. Une chaîne vide contient "seulement des chiffres", mais n'est pas un nombre entier. – marcog

+0

C'est pourquoi j'ai utilisé la réponse + = int (n [précédent: suivant]) – Marijus

Questions connexes