Ich erstelle ein Programm, das eine Datei liest, und wenn die erste Zeile der Datei nicht leer ist, liest sie die nächsten vier Zeilen. In diesen Zeilen werden Berechnungen durchgeführt und dann die nächste Zeile gelesen. Wenn diese Zeile nicht leer ist, wird sie fortgesetzt. Ich erhalte jedoch folgende Fehlermeldung:
ValueError: invalid literal for int() with base 10: ''.
Es liest die erste Zeile, kann sie jedoch nicht in eine Ganzzahl konvertieren.
Was kann ich tun, um dieses Problem zu beheben?
Der 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:
dort zu verwenden.Antworten:
Nur für das Protokoll:
Habe mich hierher gebracht ...
Muss benutzt werden!
quelle
int()
eine leere Zeichenfolge aufruft . "Verwenden Sie stattdessen float ()" löst dieses Problem nicht. Sie erhalten weiterhin einen ValueError.Folgendes ist in Python völlig akzeptabel:
int
float
float
int
float
Aber Sie bekommen ein ,
ValueError
wenn Sie eine String - Darstellung eines passieren Schwimmer inint
oder eine String - Darstellung von irgendetwas , sondern eine ganze Zahl (einschließlich leerer String). Wenn Sie eine Zeichenfolgendarstellung einesint
Gleitkommas an ein übergeben möchten, wie @katyhuff oben ausführt, können Sie zuerst in ein Gleitkommawert und dann in eine Ganzzahl konvertieren:quelle
int()
eine leere Zeichenfolge aufruft . "Verwenden Sie stattdessen float ()" löst dieses Problem nicht. Sie erhalten weiterhin einen ValueError.int(float(x))
. Dies ist die erste Frage, die bei der Suche nach diesem Fehler auftaucht.Pythonische Methode zum Durchlaufen einer Datei und zum Konvertieren in int:
Was Sie versuchen, ist etwas komplizierter, aber immer noch nicht einfach:
Auf diese Weise werden jeweils 5 Zeilen verarbeitet. Verwenden Sie
h.next()
anstelle vonnext(h)
vor Python 2.6.Der Grund , warum Sie hatte
ValueError
, weilint
nicht eine leere Zeichenfolge in die ganze Zahl konvertieren. In diesem Fall müssen Sie entweder den Inhalt der Zeichenfolge vor der Konvertierung überprüfen oder einen Fehler ausschließen:quelle
n = int(line) if line.is_integer() else int(float(line))
Ich habe eine Arbeit gefunden. Python konvertiert die Zahl in ein Float. Einfach float zuerst aufrufen und dann in ein int konvertieren, funktioniert:
output = int(float(input))
quelle
Der Grund ist, dass Sie eine leere Zeichenfolge oder eine Zeichenfolge als Argument in int erhalten. Überprüfen Sie, ob es leer ist oder Alpha-Zeichen enthält. Wenn es Zeichen enthält, ignorieren Sie diesen Teil einfach.
quelle
Der Grund, warum Sie diesen Fehler erhalten, ist, dass Sie versuchen, ein Leerzeichen in eine Ganzzahl umzuwandeln, was völlig unmöglich und eingeschränkt ist. Und deshalb erhalten Sie diesen Fehler.
Überprüfen Sie Ihren Code und korrigieren Sie ihn, es wird gut funktionieren
quelle
Also wenn du hast
Sie können es in
int
mit konvertierenfloatInInt = int(float(floatInString))
quelle
Sie haben ein Problem mit dieser Zeile:
Dies findet keine leere Zeichenfolge. Es wird eine Zeichenfolge gefunden, die aus einem Leerzeichen besteht. Vermutlich ist dies nicht das, wonach Sie suchen.
Hören Sie auf die Ratschläge aller anderen. Dies ist kein sehr idiomatischer Python-Code und wäre viel klarer, wenn Sie die Datei direkt durchlaufen, aber ich denke, dieses Problem ist ebenfalls erwähnenswert.
quelle
Bitte testen Sie diese Funktion (
split()
) an einer einfachen Datei. Ich hatte das gleiche Problem und stellte fest, dass es daransplit()
lag , dass es nicht richtig geschrieben wurde (Ausnahmebehandlung).quelle
Es gibt ein Problem mit diesem Code.
readings
ist eine neue Zeile, die aus der Datei gelesen wird - es ist eine Zeichenfolge. Daher sollten Sie es nicht mit 0 vergleichen. Außerdem können Sie es nicht einfach in eine Ganzzahl konvertieren, es sei denn, Sie sind sicher , dass es tatsächlich eine ist. Beispielsweise führen leere Zeilen hier zu Fehlern (wie Sie sicherlich herausgefunden haben).Und warum brauchen Sie die globale Zählung? Das ist mit Sicherheit schlechtes Design in Python.
quelle
Dies kann auch passieren, wenn Sie einer Liste durch Leerzeichen getrennte Ganzzahlen zuordnen müssen, die Ganzzahlen jedoch Zeile für Zeile mit der eingeben
.input()
. Wie zum Beispiel habe ich dieses Problem auf HackerRank Bon-Appetit gelöst und beim Kompilieren den folgenden Fehler erhaltenVersuchen Sie also, anstatt durch eine zeilenweise Eingabe in das Programm die durch Leerzeichen getrennten Ganzzahlen mithilfe der
map()
Methode in eine Liste abzubilden .quelle
So etwas sollte funktionieren:
quelle
Ich habe ähnliche Fehler erhalten, es stellte sich heraus, dass der Datensatz leere Werte hatte, die Python nicht in eine Ganzzahl konvertieren konnte.
quelle
Ich bin auf dasselbe Problem gestoßen, als ich versucht habe, readlines () in der for-Schleife für dasselbe Dateiobjekt zu verwenden ... Mein Verdacht, dass readling () in readline () für dasselbe Dateiobjekt ausgelöst wurde, hat diesen Fehler verursacht.
Die beste Lösung kann die Suche (0) sein, um den Dateizeiger zurückzusetzen oder die Bedingung mit dem Setzen eines Flags zu behandeln und dann ein neues Objekt für dieselbe Datei zu erstellen, indem die festgelegte Bedingung überprüft wird.
quelle
Ich bin kürzlich auf einen Fall gestoßen, in dem keine dieser Antworten funktioniert hat. Ich bin auf CSV-Daten gestoßen, bei denen Null-Bytes mit den Daten gemischt waren und diese Null-Bytes nicht entfernt wurden. Also bestand meine numerische Zeichenfolge nach dem Entfernen aus folgenden Bytes:
Um dem entgegenzuwirken, habe ich:
... wobei Felder eine Liste von CSV-Werten sind, die sich aus der Aufteilung der Zeile ergeben.
quelle
Dies scheint, als ob Messwerte manchmal eine leere Zeichenfolge sind und offensichtlich ein Fehler auftritt. Sie können Ihrer while-Schleife vor dem Befehl int (readings) eine zusätzliche Prüfung hinzufügen, z.
quelle
Es fiel mir schwer, den tatsächlichen Grund herauszufinden. Es passiert, wenn wir nicht richtig aus der Datei lesen. Sie müssen die Datei öffnen und mit der readlines () -Methode wie folgt lesen:
Es korrigiert die formatierte Ausgabe
quelle
Ihre Antwort wirft aufgrund dieser Zeile Fehler
quelle