Saya membuat program yang membaca file dan jika baris pertama file tidak kosong, itu membaca empat baris berikutnya. Perhitungan dilakukan pada baris tersebut dan kemudian baris berikutnya dibaca. Jika baris itu tidak kosong, baris itu berlanjut. Namun, saya mendapatkan kesalahan ini:
ValueError: invalid literal for int() with base 10: ''.
Itu membaca baris pertama tetapi tidak dapat mengubahnya menjadi bilangan bulat.
Apa yang bisa 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())
with open(file_to_read, 'r') as infile:
sana.Jawaban:
Sebagai catatan:
Punya aku di sini ...
Harus digunakan!
sumber
int()
string kosong. "Gunakan float () sebagai gantinya" tidak menyelesaikan masalah itu. Anda masih mendapatkan ValueError.Berikut ini benar-benar dapat diterima dalam python:
int
float
float
int
float
Tetapi Anda mendapatkan
ValueError
jika Anda melewatkan representasi string float keint
, atau representasi string apa pun kecuali bilangan bulat (termasuk string kosong). Jika Anda ingin meneruskan representasi string float keint
, seperti yang ditunjukkan @katyhuff di atas, Anda dapat mengonversi ke float terlebih dahulu, kemudian ke integer:sumber
int()
string kosong. "Gunakan float () sebagai gantinya" tidak menyelesaikan masalah itu. Anda masih mendapatkan ValueError.int(float(x))
. Karena ini adalah pertanyaan pertama yang muncul ketika mencari kesalahan ini.Cara Pythonic untuk mengulangi file dan mengkonversi ke int:
Apa yang Anda coba lakukan sedikit lebih rumit, tetapi masih belum jelas:
Dengan cara ini memproses 5 baris pada saat itu. Gunakan
h.next()
alih-alihnext(h)
sebelum Python 2.6.Alasan yang Anda miliki
ValueError
adalah karenaint
tidak dapat mengonversi string kosong ke integer. Dalam hal ini, Anda perlu memeriksa konten string sebelum konversi, atau kecuali kesalahan:sumber
n = int(line) if line.is_integer() else int(float(line))
Saya menemukan pekerjaan di sekitar. Python akan mengonversi angka menjadi float. Cukup dengan memanggil float terlebih dahulu kemudian mengubahnya menjadi int akan berfungsi:
output = int(float(input))
sumber
Alasannya adalah bahwa Anda mendapatkan string kosong atau string sebagai argumen ke int. Periksa apakah kosong atau mengandung karakter alfa. Jika berisi karakter, abaikan saja bagian itu.
sumber
Alasan Anda mendapatkan kesalahan ini adalah karena Anda mencoba mengubah karakter spasi menjadi integer, yang sama sekali tidak mungkin dan dibatasi. Dan itulah sebabnya Anda mendapatkan kesalahan ini.
Periksa kode Anda dan perbaiki, itu akan berfungsi dengan baik
sumber
Jadi kalau sudah
Anda dapat mengubahnya
int
denganfloatInInt = int(float(floatInString))
sumber
Anda punya masalah dengan baris ini:
Ini tidak menemukan string kosong. Ia menemukan string yang terdiri dari satu ruang. Agaknya ini bukan yang Anda cari.
Dengarkan saran orang lain. Ini bukan kode python yang sangat idiomatis, dan akan jauh lebih jelas jika Anda beralih ke file secara langsung, tapi saya pikir masalah ini patut dicatat juga.
sumber
Silakan uji fungsi ini (
split()
) pada file sederhana. Saya menghadapi masalah yang sama dan menemukan bahwa itu karenasplit()
tidak ditulis dengan benar (pengecualian penanganan).sumber
Ada masalah dengan kode itu.
readings
adalah baris baru yang dibaca dari file - ini adalah string. Oleh karena itu Anda tidak boleh membandingkannya dengan 0. Selanjutnya, Anda tidak bisa hanya mengubahnya menjadi bilangan bulat kecuali Anda yakin itu memang satu. Misalnya, baris kosong akan menghasilkan kesalahan di sini (seperti yang pasti Anda ketahui).Dan mengapa Anda membutuhkan perhitungan global? Itu pasti desain yang buruk di Python.
sumber
Ini juga bisa terjadi ketika Anda harus memetakan bilangan bulat yang dipisahkan ruang ke daftar tetapi Anda memasukkan bilangan bulat baris demi baris menggunakan
.input()
. Seperti misalnya saya sedang memecahkan masalah ini pada HackerRank Bon-Appetit , dan mendapat kesalahan berikut saat kompilasiJadi alih-alih memberikan input ke program baris demi baris cobalah untuk memetakan bilangan bulat yang dipisahkan ruang menjadi daftar menggunakan
map()
metode ini.sumber
Sesuatu seperti ini seharusnya bekerja:
sumber
Saya mendapatkan kesalahan yang serupa, ternyata dataset memiliki nilai kosong yang tidak dapat dikonversi oleh python menjadi integer.
sumber
Saya masuk ke masalah yang sama ketika mencoba menggunakan readlines () di dalam untuk loop untuk objek file yang sama ... Kecurigaan saya adalah menembak readling () di dalam readline () untuk objek file yang sama menyebabkan kesalahan ini.
Solusi terbaik dapat digunakan seek (0) untuk mengatur ulang penunjuk file atau Kondisi penanganan dengan menetapkan beberapa flag kemudian membuat objek baru untuk file yang sama dengan memeriksa ketentuan yang ditetapkan ....
sumber
Baru-baru ini saya menemukan sebuah kasus di mana tidak ada jawaban yang berfungsi. Saya menemukan data CSV di mana ada byte nol yang dicampur dengan data, dan byte nol itu tidak dilucuti. Jadi, string numerik saya, setelah pengupasan, terdiri dari byte seperti ini:
Untuk mengatasi ini, saya lakukan:
... di mana bidang adalah daftar nilai csv yang dihasilkan dari pemisahan garis.
sumber
Sepertinya pembacaan terkadang berupa string kosong dan jelas kesalahan muncul. Anda dapat menambahkan pemeriksaan tambahan ke loop sementara Anda sebelum perintah int (bacaan) seperti:
sumber
Saya kesulitan menemukan alasan sebenarnya, itu terjadi ketika kita tidak membaca dengan benar dari file. Anda perlu membuka file dan membaca dengan metode readlines () seperti di bawah ini:
Ini mengoreksi output yang diformat
sumber
jawaban Anda melempar kesalahan karena baris ini
sumber