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())
247
3
Modo pitonico di iterare su un file e convertire in int:
Quello che stai cercando di fare è leggermente più complicato, ma non è ancora semplice:
In questo modo elabora 5 linee alla volta. Usate
h.next()
invece dinext(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: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.
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: