Je crée un programme qui lit un fichier et si la première ligne du fichier n'est pas vide, il lit les quatre lignes suivantes. Les calculs sont effectués sur ces lignes, puis la ligne suivante est lue. Si cette ligne n'est pas vide, elle continue. Cependant, je reçois cette erreur:
ValueError: invalid literal for int() with base 10: ''.
Il lit la première ligne mais ne peut pas la convertir en entier.
Que puis-je faire pour résoudre ce problème?
Le code:
file_to_read = raw_input("Enter file name of tests (empty string to end program):")
try:
infile = open(file_to_read, 'r')
while file_to_read != " ":
file_to_write = raw_input("Enter output file name (.csv will be appended to it):")
file_to_write = file_to_write + ".csv"
outfile = open(file_to_write, "w")
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
minimum = (infile.readline())
maximum = (infile.readline())
with open(file_to_read, 'r') as infile:
là-bas.Réponses:
Juste pour info:
M'a ici ...
Doit être utilisé!
la source
int()
une chaîne vide. "Utilisez float () à la place" ne résout pas ce problème. Vous obtenez toujours une ValueError.Les éléments suivants sont totalement acceptables en python:
int
float
float
int
float
Mais vous obtenez un
ValueError
si vous passez une représentation de chaîne d'un flotteur dansint
, ou une représentation de chaîne de quoi que ce soit , mais un entier (y compris chaîne vide). Si vous voulez passer une représentation sous forme de chaîne d'un flottant à unint
, comme le souligne @katyhuff ci-dessus, vous pouvez d'abord le convertir en un flottant, puis en un entier:la source
int()
une chaîne vide. "Utilisez float () à la place" ne résout pas ce problème. Vous obtenez toujours une ValueError.int(float(x))
. Comme c'est la première question à apparaître lors de la recherche de cette erreur.Façon pythonique d'itérer sur un fichier et de convertir en int:
Ce que vous essayez de faire est un peu plus compliqué, mais toujours pas simple:
De cette façon, il traite 5 lignes à la fois. Utilisez
h.next()
plutôtnext(h)
qu'avant Python 2.6.La raison en
ValueError
est queint
vous ne pouvez pas convertir une chaîne vide en entier. Dans ce cas, vous devez soit vérifier le contenu de la chaîne avant la conversion, soit excepter une erreur:la source
n = int(line) if line.is_integer() else int(float(line))
J'ai trouvé un travail autour. Python convertira le nombre en un flottant. Il suffit d'appeler float d'abord, puis de convertir cela en entier fonctionnera:
output = int(float(input))
la source
La raison en est que vous obtenez une chaîne vide ou une chaîne comme argument dans int. Vérifiez s'il est vide ou s'il contient des caractères alpha. S'il contient des caractères, ignorez simplement cette partie.
la source
La raison pour laquelle vous obtenez cette erreur est que vous essayez de convertir un caractère espace en entier, ce qui est totalement impossible et restreint, et c'est pourquoi vous obtenez cette erreur.
Vérifiez votre code et corrigez-le, cela fonctionnera bien
la source
Donc si vous avez
Vous pouvez le convertir en
int
avecfloatInInt = int(float(floatInString))
la source
Vous avez un problème avec cette ligne:
Cela ne trouve pas de chaîne vide. Il trouve une chaîne composée d'un espace. Vraisemblablement, ce n'est pas ce que vous recherchez.
Écoutez les conseils de tous les autres. Ce n'est pas du code python très idiomatique, et serait beaucoup plus clair si vous parcourez directement le fichier, mais je pense que ce problème mérite également d'être noté.
la source
Veuillez tester cette fonction (
split()
) sur un fichier simple. J'étais confronté au même problème et j'ai découvert que c'était parce qu'ilsplit()
n'était pas écrit correctement (gestion des exceptions).la source
Il y a un problème avec ce code.
readings
est une nouvelle ligne lue dans le fichier - c'est une chaîne. Par conséquent, vous ne devez pas le comparer à 0. De plus, vous ne pouvez pas simplement le convertir en un entier, sauf si vous êtes sûr c'est bien un. Par exemple, des lignes vides produiront des erreurs ici (comme vous l'avez sûrement découvert).Et pourquoi avez-vous besoin du décompte mondial? C'est très certainement une mauvaise conception en Python.
la source
Cela peut également se produire lorsque vous devez mapper des entiers séparés par des espaces à une liste mais que vous entrez les entiers ligne par ligne à l'aide de la
.input()
. Comme par exemple, je résolvais ce problème sur HackerRank Bon-Appetit , et j'ai obtenu l'erreur suivante lors de la compilationDonc, au lieu de donner une entrée au programme ligne par ligne, essayez de mapper les entiers séparés par des espaces dans une liste en utilisant la
map()
méthode.la source
Quelque chose comme ça devrait fonctionner:
la source
J'obtenais des erreurs similaires, il s'avère que l'ensemble de données avait des valeurs vides que python ne pouvait pas convertir en entier.
la source
Je suis entré dans le même problème en essayant d'utiliser readlines () à l'intérieur pour la boucle pour le même objet fichier ... Mon soupçon de tirer readling () à l'intérieur de readline () pour le même objet fichier a provoqué cette erreur.
La meilleure solution peut être d'utiliser la recherche (0) pour réinitialiser le pointeur de fichier ou gérer la condition en définissant un indicateur, puis créer un nouvel objet pour le même fichier en vérifiant la condition définie ....
la source
J'ai récemment rencontré un cas où aucune de ces réponses n'a fonctionné. J'ai rencontré des données CSV où il y avait des octets nuls mélangés avec les données, et ces octets nuls n'ont pas été supprimés. Donc, ma chaîne numérique, après suppression, se composait d'octets comme ceci:
Pour contrer cela, j'ai fait:
... où champs est une liste de valeurs csv résultant du fractionnement de la ligne.
la source
Il semble que les lectures soient parfois une chaîne vide et, évidemment, une erreur se produit. Vous pouvez ajouter une vérification supplémentaire à votre boucle while avant la commande int (lectures) comme:
la source
J'ai eu du mal à comprendre la raison réelle, cela se produit lorsque nous ne lisons pas correctement le fichier. vous devez ouvrir le fichier et lire avec la méthode readlines () comme ci-dessous:
Il corrige la sortie formatée
la source
votre réponse génère des erreurs à cause de cette ligne
la source