ValueError: letterale non valido per int() con base 10: ''

Sto creando un programma che legge un file e se la prima riga del file non è vuota, legge le quattro righe successive. I calcoli vengono eseguiti su quelle righe e poi viene letta la riga successiva. Se quella linea non è vuota, continua. Tuttavia, sto ottenendo questo errore:

ValueError: letterale non valido per int() con base 10: ''.

Sta leggendo la prima linea ma non può convertirla in un intero.

Cosa posso fare per risolvere questo problema?

Il codice:

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

Modo pitonico di iterare su un file e convertire in int:

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

Quello che stai cercando di fare è leggermente più complicato, ma non è ancora semplice:

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

In questo modo elabora 5 linee alla volta. Usate h.next() invece di next(h) prima di Python 2.6.

La ragione per cui hai avuto un ValueError è perché int non può convertire una stringa vuota in un intero. In questo caso avresti bisogno o di controllare il contenuto della stringa prima della conversione, o di escludere un errore:

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

C'è un problema con questo codice. readings è una nuova linea letta dal file - è una stringa. Quindi non dovresti confrontarla con 0. Inoltre, non puoi semplicemente convertirla in un numero intero a meno che tu non sia sicuro che lo sia davvero. Per esempio, le linee vuote produrranno errori in questo caso (come avrai sicuramente scoperto).

E perché hai bisogno del conteggio globale? Questo è sicuramente un cattivo design in Python.

Commentari (0)

Sto creando un programma che legge un file e se la prima riga del file non è vuota, legge le successive quattro righe. I calcoli vengono eseguiti su quelle righe e poi la riga successiva viene letta.

Qualcosa del genere dovrebbe funzionare:

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