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

Pitonski način iteracije po datoteki in pretvorbe v int:

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

To, kar želite storiti, je nekoliko bolj zapleteno, vendar še vedno ni enostavno:

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

Na ta način obdeluje 5 vrstic hkrati. Pred različico Python 2.6 uporabljajte h.next() namesto next(h).

Razlog, da ste imeli napako ValueError, je v tem, da int ne more pretvoriti praznega niza v celo število. V tem primeru bi morali pred pretvorbo preveriti vsebino niza ali pa bi se pojavila napaka:

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

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.

Komentarji (0)

Ustvarjam program, ki bere datoteko in če je prva vrstica datoteke ni prazna, prebere naslednje štiri vrstic. Izračuni se izvajajo na podlagi teh vrsticah, nato pa je naslednja vrstica prebere.

Nekaj takega bi moralo delovati:

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