Forum >> Principianti >> Errore persistente

Pagina: 1

Salve, svolgendo un programma mi trovo di fronte ad un errore persistente che non riesco a capire,
so a grandi linee di che si tratta ma non riesco ad eliminarlo, confido in qualcuno che riesca a chiarirmi le idee:


ValueError: invalid literal for int() with base 10: ''


il programma lavora bene fino a quasi la fine, infatti da i valori aspettati in output, l'unico problema è che arrivato alla fine della lettura del file invece di uscire dal ciclo while con sentinella rimane all'interno generando l'errore:


testo dell'esercizio:
''' A Ex4(file) Scrivere una funzione che prende in ingresso un file che contiene 
n interi per ogni riga separati da spazio e restituisce l’intero più piccolo
e l’intero più grande. Ad esempio, se il file vale
“3 7\n55 17\n8 23\n99 12\n6 21\n” 
la funzione deve restituire (3,99). '''




filein = open('filein_ex4.txt', 'r', encoding='utf-8')

line = filein.readline()
ch = line.strip().split(' ')
miN = maX = int(ch0)

while len(line) > 0:                     # while con sentinella, esce dal ciclo quando finiscono le righe del file
    ch = line.strip().split(' ')

    if int(ch0) < int(ch1):
        print(ch0, ch1)              # controllo numeri

        if miN > int(ch0):
            miN = int(ch0)
        if maX < int(ch1):
            maX = int(ch1)

    else:
        print(ch0, ch1)              # controllo numeri

        if miN > int(ch1):
            miN = int(ch1)
        if maX < int(ch0):
            maX = int(ch0)

    print('min = ', miN, 'max = ', maX)   # controllo numeri

    line = filein.readline()

filein.close()
print('minimum is', miN, 'maximum is', maX)



questo è l'output del programma dopo averlo eseguito:


/usr/bin/python3.5 /home/michele/Python/Michele's-projects/Esercitazione6/ex4.py
3 7
min =  3 max =  7
55 17
min =  3 max =  55
8 23
min =  3 max =  55
99 12
min =  3 max =  99
6 21
min =  3 max =  99
Traceback (most recent call last):
  File "/home/michele/Python/Michele's-projects/Esercitazione6/ex4.py", line 15, in <module>
    if int(ch0) < int(ch1):
ValueError: invalid literal for int() with base 10: ''

Process finished with exit code 1



grazie in anticipo e buon Ferragosto!

NB: accanto ai punti interrogativi nel testo c'è la [ ], non so perchè non la riconosce.




--- Ultima modifica di michele3696 in data 2016-08-15 18:10:54 ---
Allegati
Ciao caro, il messaggio è abbastanza esplicito, ma ti do un indizio:
>>> int('7777.000000')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10

>>> float('7777.000000')
7777.0
Buon ferragosto anche a te.


--- Ultima modifica di Daniele aka Palmux in data 2016-08-15 20:06:02 ---
Forse non ho ben capito l'indizio -.- io ho interpretato così:



''' A Ex4(file) Scrivere una funzione che prende in ingresso un file che contiene n interi per ogni riga
separati da spazio e restituisce l’intero più piccolo e l’intero più grande. Ad esempio, se il file vale
“3 7\n55 17\n8 23\n99 12\n6 21\n” la funzione deve restituire (3,99). '''


filein = open('filein_ex4.txt', 'r', encoding='utf-8')

line = filein.readline()
ch = line.strip().split(' ')
miN = maX = float(ch[0])

8)]while 8)]len(line) > 0: # while con sentinella, esce dal ciclo quando finiscono le righe del file

ch = line.strip().split(' ')
n1 = float(ch[0])
n2 = float(ch[1])

if n1 < n2:
print(ch[0], ch[1]) # controllo numeri

if miN > n1:
miN = n1
if maX < n2:
maX = n2

else:
print(ch[0], ch[1]) # controllo numeri

if miN > n2:
miN = n2
if maX < n1:
maX = n1

print('min = ', miN, 'max = ', maX) # controllo numeri

line = filein.readline()

filein.close()
print('minimum is', miN, 'maximum is', maX)


solo che mi da lo stesso un errore:




/usr/bin/python3.5 /home/michele/Python/Michele's-projects/Esercitazione6/ex4.py
3 7
min =  3.0 max =  7.0
55 17
min =  3.0 max =  55.0
8 23
min =  3.0 max =  55.0
99 12
min =  3.0 max =  99.0
6 21
min =  3.0 max =  99.0
Traceback (most recent call last):
  File "/home/michele/Python/Michele's-projects/Esercitazione6/ex4.py", line 15, in <module>
    n1 = float(ch0)
ValueError: could not convert string to float: 



modificando invece il numero accanto al while da 0 a 2 ossia:




8)]while 8)]len(line) > 2:il problema quindi risiedeva nel modo in cui controllavo la riga finale, volendo stoppare il ciclo while prima di immettere nel ciclo stesso un valore ' ' stringa vuota.

Correggendo la variabile line ho potuto eliminare qualsiasi valore di spaziatura con

line = filein.readline().strip




filein = open('filein_ex4.txt', 'r', encoding='utf-8')

line = filein.readline().strip()
ch = line.split(' ')
miN = maX = float(ch[0])

while len(line) > 0: # while con sentinella, esce dal ciclo quando finiscono le righe del file

ch = line.split(' ')
n1 = float(ch[0])
n2 = float(ch[1])

if n1 < n2:
print(ch[0], ch[1]) # controllo numeri

if miN > n1:
miN = n1
if maX < n2:
maX = n2

else:
print(ch[0], ch[1]) # controllo numeri

if miN > n2:
miN = n2
if maX < n1:
maX = n1

print('min = ', miN, 'max = ', maX) # controllo numeri

line = filein.readline().strip()


filein.close()
print('minimum is', miN, 'maximum is', maX)
Grazie dell'aiuto. Buona serata! :D



Due cose veloci:

1. Formatta il codice quando lo posti, puoi farlo col pulsante che trovi in alto prima della tavolozza dei colori. In Python la sintassi importante.

2. Il secondo errore in realtà non era lo stesso, Python è autoesplicativo in questi casi. ValueError: could not convert string to float è qualcosa di diverso dal precedente. Eliminando dal tuo ciclo quella stringa finale hai aggirato il problema, che potevi anche eliminare con un semplice controllo di genere, passami il termine.

Cya
Ah ecco, consentimi un' ultima domanda, l'errore che mi viene fuori quando eseguo il programma che "non aggira il problema" per così dire, senza la correzione nella riga di " line = filein.readline().strip() "deriva dal fatto che legge una stringa del genere [ ' ' ] e cerca di convertirla in float vero? Nel caso, come posso correggerlo?
Ah ecco, consentimi un' ultima domanda, l'errore che mi viene fuori quando eseguo il programma che "non aggira il problema" per così dire, senza la correzione nella riga di " line = filein.readline().strip() "deriva dal fatto che legge una stringa del genere [ ' ' ] e cerca di convertirla in float vero? Nel caso, come posso correggerlo?
per esempio potresti tagliare la testa al tor^W serpente :py: con:

>>> numbers = [int(i) for i in open("filein_ex4.txt").read().split()]
>>> print(min(numbers), max(numbers))
3 99

:fingers-crossed:
THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
:O Bella pensata! Grazie mille!!
Devo imparare anche io a tagliare la testa al serpente :D


Pagina: 1



Esegui il login per scrivere una risposta.