Daugiau
ValueError: neteisingas int() literalas su baze 10: ''
Kuriu programą, kuri skaito failą ir, jei pirmoji failo eilutė nėra tuščia, skaito kitas keturias eilutes. Šiose eilutėse atliekami skaičiavimai, tada skaitoma kita eilutė. Jei ta eilutė nėra tuščia, skaitoma toliau. Tačiau gaunu šią klaidą:
ValueError: invalid literal for int() with base 10: ''.
Ji nuskaito pirmąją eilutę, bet negali jos paversti sveikuoju skaičiumi.
Ką galėčiau padaryti, kad išspręstumėte šią problemą?
Kodas:
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
Pitoniškas būdas iteruoti failą ir konvertuoti į int:
Tai, ką jūs bandote padaryti, yra šiek tiek sudėtingiau, bet vis tiek nėra paprasta:
Taip vienu metu apdorojamos 5 eilutės. Iki Python 2.6 versijos vietoj
next(h)
naudokiteh.next()
.Priežastis, dėl kurios jums įvyko
ValueError
, yra ta, kadint
negali konvertuoti tuščios eilutės į sveikąjį skaičių. Tokiu atveju prieš konvertuodami turėtumėte arba patikrinti eilutės turinį, arba neįtraukti klaidos:Su šiuo kodu yra problema.
readings
yra nauja eilutė, nuskaityta iš failo - tai eilutė. Todėl neturėtumėte jos lyginti su 0. Be to, negalite jos tiesiog konvertuoti į sveiką skaičių, nebent esate tikri, kad ji iš tikrųjų yra sveikas skaičius. Pavyzdžiui, tuščios eilutės čia sukels klaidų (kaip jau tikrai supratote).Ir kam jums reikalingas globalus skaičius? Tai neabejotinai blogas Python dizainas.
Kažkas panašaus turėtų veikti: