Pourquoi est-ce que je reçois cette erreur ?
ValueError : littéral invalide pour int() avec base 10 : ''.
Pourquoi est-ce que je reçois cette erreur ?
ValueError : littéral invalide pour int() avec base 10 : ''.
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.
Cela devrait être la meilleure réponse acceptée à cette question. J'ai failli fermer la page et ne pas la voir. Merci.
Ajouter à la réponse int(float('55063.000000')) comme la question est get int(). Alors, la réponse sera vraiment excellente.
Les éléments suivants sont tout à fait acceptables en python :
int
float
float
int
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
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.
@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.
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.....
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
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.
Parce que l'un est raisonnablement prévisible et ignorable, mais l'autre est le signe d'une erreur.
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.
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