Viac na
ValueError: neplatný literál pre int() so základom 10: ''
Vytváram program, ktorý načíta súbor a ak prvý riadok súboru nie je prázdny, načíta ďalšie štyri riadky. Na týchto riadkoch sa vykonajú výpočty a potom sa načíta ďalší riadok. Ak tento riadok nie je prázdny, pokračuje sa ďalej. Dostávam však túto chybu:
ValueError: invalid literal for int() with base 10: ''.
Prvý riadok prečíta, ale nedokáže ho previesť na celé číslo.
Čo môžem urobiť, aby som tento problém vyriešil?
Kód:
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
Pytonický spôsob iterácie nad súborom a konverzie na int:
To, čo sa snažíte urobiť, je o niečo zložitejšie, ale stále nie je jednoduché:
Takto sa spracuje 5 riadkov naraz. Pred verziou Python 2.6 používajte
h.next()
namiestonext(h)
.Dôvod, prečo ste mali
ValueError
, je ten, žeint
nedokáže previesť prázdny reťazec na celé číslo. V tomto prípade by ste'museli buď skontrolovať obsah reťazca pred konverziou, alebo okrem chyby:V tomto kóde je problém.
readings
je nový riadok načítaný zo súboru - je to reťazec. Preto by ste ho nemali porovnávať s 0. Ďalej ho nemôžete jednoducho previesť na celé číslo, pokiaľ si nie ste istí, že je to naozaj celé číslo. Napríklad prázdne riadky tu spôsobia chyby (ako ste už určite zistili).A prečo potrebujete globálny počet? To'je určite zlý návrh v Pythone.
Niečo také by malo fungovať: