ValueError: neveljaven literal za int() z osnovo 10: ''
Ustvarjam program, ki prebere datoteko in če prva vrstica datoteke ni prazna, prebere naslednje štiri vrstice. V teh vrsticah se izvedejo izračuni, nato pa se prebere naslednja vrstica. Če ta vrstica ni prazna, se nadaljuje. Vendar pa dobim to napako:
ValueError: invalid literal for int() with base 10: ''.
Prvo vrstico prebere, vendar je ne more pretvoriti v celo število.
Kaj lahko storim, da odpravim to težavo?
Koda:
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
Pitonski način iteracije po datoteki in pretvorbe v int:
To, kar želite storiti, je nekoliko bolj zapleteno, vendar še vedno ni enostavno:
Na ta način obdeluje 5 vrstic hkrati. Pred različico Python 2.6 uporabljajte
h.next()
namestonext(h)
.Razlog, da ste imeli napako
ValueError
, je v tem, daint
ne more pretvoriti praznega niza v celo število. V tem primeru bi morali pred pretvorbo preveriti vsebino niza ali pa bi se pojavila napaka:Pri tej kodi je težava.
readings
je nova vrstica, prebrana iz datoteke - to je niz. Zato ga ne smete primerjati z 0. Poleg tega ga ne morete pretvoriti v celo število, razen če ste prepričani, da je to res celo število. Na primer, prazne vrstice bodo povzročile napake (kot ste zagotovo ugotovili).In zakaj potrebuješ globalno število? To je vsekakor slaba zasnova v Pythonu.
Nekaj takega bi moralo delovati: