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())

Pytonický spôsob iterácie nad súborom a konverzie na int:

for line in open(fname):
   if line.strip():           # line contains eol character(s)
       n = int(line)          # assuming single integer on each line

To, čo sa snažíte urobiť, je o niečo zložitejšie, ale stále nie je jednoduché:

h = open(fname)
for line in h:
    if line.strip():
        [int(next(h).strip()) for _ in range(4)]     # list of integers

Takto sa spracuje 5 riadkov naraz. Pred verziou Python 2.6 používajte h.next() namiesto next(h).

Dôvod, prečo ste mali ValueError, je ten, že int 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:

try:
   int('')
except ValueError:
   pass      # or whatever
Komentáre (5)
    readings = (infile.readline())
    print readings
    while readings != 0:
        global count
        readings = int(readings)

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.

Komentáre (0)

Vytváram program, ktorý číta súbor a ak je prvý riadok súboru nie je prázdny, prečíta ďalšie štyri riadky. Výpočty sa vykonávajú na týchto riadkoch a potom sa načíta ďalší riadok prečíta.

Niečo také by malo fungovať:

for line in infile:
    next_lines = []
    if line.strip():
        for i in xrange(4):
            try:
                next_lines.append(infile.next())
            except StopIteration:
                break
    # Do your calculation with "4 lines" here
Komentáre (0)