ValueError: ungültiges Literal für int() mit Basis 10: ''

Ich erstelle ein Programm, das eine Datei liest, und wenn die erste Zeile der Datei nicht leer ist, liest es die nächsten vier Zeilen. In diesen Zeilen werden Berechnungen durchgeführt, und dann wird die nächste Zeile gelesen. Wenn diese Zeile nicht leer ist, wird fortgefahren. Ich erhalte jedoch diese Fehlermeldung:

ValueError: Ungültiges Literal für int() mit Basis 10: ''.`

Es liest die erste Zeile, kann sie aber nicht in eine Ganzzahl umwandeln.

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())

Pythonische Art der Iteration über eine Datei und Konvertierung in int:

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

Was Sie versuchen, ist etwas komplizierter, aber immer noch nicht ganz einfach:

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

Auf diese Weise werden 5 Zeilen auf einmal verarbeitet. Verwenden Sie h.next() anstelle von next(h) vor Python 2.6.

Der Grund für den ValueError ist, dass int einen leeren String nicht in eine ganze Zahl umwandeln kann. In diesem Fall müssen Sie entweder den Inhalt der Zeichenkette vor der Konvertierung überprüfen, oder einen Fehler ausschließen:

try:
   int('')
except ValueError:
   pass      # or whatever
Kommentare (5)
    readings = (infile.readline())
    print readings
    while readings != 0:
        global count
        readings = int(readings)

Es gibt ein Problem mit diesem Code. Readings" ist eine neue Zeile, die aus der Datei gelesen wurde - es ist ein String. Daher sollten Sie sie nicht mit 0 vergleichen. Außerdem können Sie sie nicht einfach in eine Ganzzahl umwandeln, wenn Sie nicht sicher sind, dass es tatsächlich eine ist. Zum Beispiel führen leere Zeilen hier zu Fehlern (wie Sie sicher schon herausgefunden haben).

Und warum brauchen Sie die globale Anzahl? Das ist ganz sicher schlechtes Design in Python.

Kommentare (0)

Ich erstelle ein Programm, das eine Datei liest und wenn die erste Zeile der Datei nicht leer ist, liest es die nächsten vier Zeilen. Die Berechnungen werden auf diesen Zeilen durchgeführt und dann wird die nächste Zeile gelesen.

So etwas sollte funktionieren:

for line in infile:
    next_lines = []
    if line.strip():
        for i in xrange(4):
            try:
                next_lines.append(infile.next())
            except StopIteration:
                break
    # Do your calculation with "4 lines" here
Kommentare (0)