710 votes

ValueError : littéral invalide pour int() en base 10 : ''.

Pourquoi est-ce que je reçois cette erreur ?

ValueError : littéral invalide pour int() avec base 10 : ''.

5 votes

Vous devriez envisager d'utiliser with open(file_to_read, 'r') as infile: là.

3 votes

Pour tous ceux qui cherchent actuellement ici. L'erreur peut provenir du fait qu'une des lignes n'est pas sous forme de nombre entier. Par exemple, "oui" n'est pas sous la forme correcte mais "3" l'est. Pour cette question, la première ligne peut ne pas avoir de "1", "2", "3"... pour la convertir en un entier.

2 votes

J'ai obtenu cette erreur lorsque la chaîne d'entrée avait un espace entre les chiffres. cette erreur signifie essentiellement que votre chaîne d'entrée n'est pas valide pour la conversion de chaîne en nombre entier. pour la conversion, votre chaîne doit seulement et uniquement contenir les caractères suivants : +-.0123456789

817voto

FdoBad Points 211

Juste pour info :

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

Je suis ici...

>>> int(float('55063.000000'))
55063

Il faut l'utiliser !

153 votes

J'ajouterai simplement, pour plus de clarté pour les futurs lecteurs, qu'en effet, int(float('1.0')) fonctionne lorsque int('1.0') lève le ValueError.

8 votes

Cela devrait être la meilleure réponse acceptée à cette question. J'ai failli fermer la page et ne pas la voir. Merci.

4 votes

Ajouter à la réponse int(float('55063.000000')) comme la question est get int(). Alors, la réponse sera vraiment excellente.

167voto

ucpete Points 23

Les éléments suivants sont tout à fait acceptables en python :

  • passer une représentation en chaîne d'un entier dans int
  • passer une représentation de chaîne de caractères d'un flottant dans float
  • passer une représentation en chaîne d'un entier dans float
  • en passant un flotteur dans int
  • en passant un nombre entier dans float

Mais vous obtenez un ValueError si vous passez une représentation en chaîne d'un float sur int ou une représentation en chaîne de n'importe quoi d'autre qu'un entier (y compris une chaîne vide). Si vous souhaitez transmettre la représentation en chaîne d'un flottant à une fonction int Comme @katyhuff l'a souligné plus haut, vous pouvez d'abord convertir en flottant, puis en entier :

>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5

10 votes

Cette réponse ne semble pas avoir de rapport avec la question. La question est de savoir comment on peut éviter une ValueError lorsque l'on appelle int() sur une chaîne vide. "Utiliser float() à la place" ne résout pas ce problème. Vous obtenez toujours une ValueError.

6 votes

@Kevin Même si cela ne répond pas directement à la question de l'OP. Cela aide cependant les personnes qui ont ce problème et qui n'ont pas peur de la int(float(x)) . C'est la première question qui apparaît lorsque l'on recherche cette erreur.

3 votes

C'est incroyablement stupide. Pourquoi ne pas faire en sorte que int() accepte une chaîne de caractères ? C'est exactement ce que je m'attendais à ce qu'elle fasse et non pas qu'elle soit transformée en float d'abord.....

71voto

SilentGhost Points 79627

Une façon pythonique d'itérer sur un fichier et de le convertir en int :

for line in open(fname):
   if line.strip():           # line contains eol character(s)
       n = int(line)          # assuming single integer on each line

Ce que vous essayez de faire est légèrement plus compliqué, mais toujours pas simple :

h = open(fname)
for line in h:
    if line.strip():
        [int(next(h).strip()) for _ in range(4)]     # list of integers

De cette façon, il traite 5 lignes à la fois. Utilisez h.next() au lieu de next(h) avant Python 2.6.

La raison pour laquelle vous avez ValueError est parce que int ne peut pas convertir une chaîne vide en un entier. Dans ce cas, il faut soit vérifier le contenu de la chaîne avant la conversion, soit prévoir une erreur :

try:
   int('')
except ValueError:
   pass      # or whatever

4 votes

Votre try/except ne fait pas la distinction entre quelque chose de raisonnablement prévisible (ligne blanche/vide) et quelque chose de désagréable comme un non-entier.

0 votes

Et pourquoi voudriez-vous distinguer ces choses ?

3 votes

Parce que l'un est raisonnablement prévisible et ignorable, mais l'autre est le signe d'une erreur.

30voto

Brad123 Points 11

J'ai trouvé une solution. Python convertira le nombre en un flottant. Il suffit d'appeler d'abord float puis de le convertir en int pour que cela fonctionne : output = int(float(input))

3 votes

Cette réponse n'est-elle pas équivalente à celle donnée par @FdoBad ?

18voto

Joish Points 329

La raison pour laquelle vous obtenez cette erreur est que vous essayez de convertir un caractère d'espace en un nombre entier, ce qui est totalement impossible et restreint, et c'est pourquoi vous obtenez cette erreur. enter image description here

Vérifiez votre code et corrigez-le, il fonctionnera bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X