ValueError: tidak valid literal untuk int() dengan dasar 10: ''

Saya membuat sebuah program yang membaca sebuah file, dan jika baris pertama dari file yang tidak kosong, bunyinya empat baris. Perhitungan dilakukan pada baris tersebut dan kemudian baris berikutnya adalah membaca. Jika baris yang tidak kosong terus. Namun, saya mendapatkan error ini:

ValueError: tidak valid literal untuk int() dengan dasar 10: ''.

Itu adalah membaca baris pertama, tetapi dapat't dikonversi ke integer.

Apa yang dapat saya lakukan untuk memperbaiki masalah ini?

Kode:

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())
Mengomentari pertanyaan (1)

Hanya untuk catatan:

>>> int('55063.000000')
Traceback (most recent call last):
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: '55063.000000'

Punya saya di sini...

>>> float('55063.000000')
55063.0

Untuk digunakan!

Komentar (5)

Pythonic cara iterasi file dan konversi ke int:

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

Apa yang anda're coba lakukan adalah sedikit lebih rumit, tapi masih tidak lurus ke depan:

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

Cara ini proses 5 baris pada satu waktu. Menggunakan jam.next() bukan berikutnya(h) sebelum Python 2.6.

Alasan anda harus ValueError karena int tidak dapat mengkonversi string kosong ke integer. Dalam hal ini anda'd butuhkan untuk memeriksa isi dari string sebelum konversi, atau kecuali kesalahan:

try:
   int('')
except ValueError:
   pass      # or whatever
Komentar (5)

Berikut adalah benar-benar diterima di python:

  • lewat representasi string dari integer ke int
  • lewat representasi string dari float ke mengapung
  • lewat representasi string dari integer ke mengapung
  • melewati mengapung ke int
  • lewat sebuah integer ke mengapung

Tapi anda mendapatkan ValueError jika anda lulus representasi string dari float ke int, atau representasi string dari apa-apa tapi integer (termasuk string kosong). Jika anda ingin lulus representasi string dari pelampung untuk sebuah int, seperti @katyhuff poin di atas, anda dapat mengkonversi ke float pertama, kemudian ke integer:

>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5
Komentar (2)

Saya menemukan pekerjaan di sekitar. Python akan mengkonversi nomor ke float. Hanya memanggil float pertama maka konversi yang ke int akan bekerja: output = int(float(input))

Komentar (0)

Alasannya Adalah bahwa Anda mendapatkan sebuah string kosong atau string sebagai argumen ke int sebelum cek itu kosong atau mengandung karakter alpha atau tidak jika itu berisi dari mengabaikan bagian yang sederhana.

Komentar (2)

Alasan anda mendapatkan kesalahan ini adalah bahwa anda mencoba untuk mengkonversi karakter ruang untuk integer, yang benar-benar mustahil dan dibatasi.Dan yang's mengapa anda mendapatkan kesalahan ini.

Memeriksa kode anda dan memperbaikinya, itu akan bekerja dengan baik

Komentar (0)

Anda've punya masalah dengan baris ini:

while file_to_read != " ":

Ini tidak menemukan string kosong. Ia menemukan sebuah string yang terdiri dari satu ruang. Mungkin ini bukan apa yang anda cari.

Mendengarkan orang lain's saran. Ini sangat tidak idiomatik kode python, dan akan lebih jelas jika anda iterate atas file secara langsung, tetapi saya pikir masalah ini dicatat juga.

Komentar (0)

Silakan menguji fungsi ini (split()) pada file sederhana. Saya menghadapi masalah yang sama dan menemukan bahwa itu karena split() tidak ditulis dengan benar (exception handling).

Komentar (0)
    readings = (infile.readline())
    print readings
    while readings != 0:
        global count
        readings = int(readings)

Ada's masalah dengan kode tersebut. bacaan ini baris baru membaca dari file - it's a string. Oleh karena itu anda tidak harus membandingkannya dengan 0. Selanjutnya, anda bisa't hanya dikonversi ke integer kecuali anda're yakin it's memang salah satu. Misalnya, baris kosong akan menghasilkan kesalahan di sini (seperti yang anda've pasti tahu).

Dan mengapa anda perlu global count? Yang's paling pasti desain yang buruk di Python.

Komentar (0)

Ini juga bisa terjadi ketika anda memiliki untuk memetakan ruang dipisahkan bilangan bulat untuk daftar tapi anda memasukkan integer baris demi baris menggunakan .input(). Seperti misalnya saya memecahkan masalah ini pada HackerRank Bon Appetit, dan mendapat error berikut ketika kompilasi

Jadi, bukannya memberikan masukan untuk program baris demi baris mencoba untuk memetakan ruang dipisahkan bilangan bulat ke dalam daftar menggunakan peta() metode.

Komentar (0)

saya menciptakan sebuah program yang membaca file, dan jika baris pertama dari file tidak kosong, bunyinya empat garis-garis. Perhitungan dilakukan pada baris tersebut dan kemudian baris berikutnya adalah baca.

Hal seperti ini harus bekerja:

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

Saya mendapatkan kesalahan serupa, ternyata bahwa data telah kosong nilai-nilai yang python tidak bisa dikonversi ke integer.

Komentar (1)

Saya punya masalah yang sama ketika mencoba untuk menggunakan readlines() dalam loop yang sama dengan file obyek... kecurigaan Saya adalah menembak readling() dalam readline() untuk file yang sama objek yang disebabkan kesalahan ini.

Solusi terbaik yang dapat digunakan seek(0) untuk me-reset file pointer atau Menangani kondisi dengan pengaturan beberapa bendera kemudian membuat objek baru untuk file yang sama dengan memeriksa set kondisi....

Komentar (0)