2017-02-21 6 views
2

Я работаю над этим проектом в течение трех недель, и я не являюсь кодирующим человеком. Я честно делаю все возможное. У меня сложилось уважение к программистам во всем мире.Невозможно прекратить получение этой ошибки: ValueError: недействительный литерал для int() с базой 10: ''

Сначала я попытался импортировать сериал и сделать что-то с его содержимым сразу, и это не сработало. Теперь я пытаюсь записать его в текстовый файл, прочитать его и сделать с ним что-то.

В любом случае, я не могу преобразовать его в целое число по какой-либо причине. Это Эрро я получаю:

ValueError: неверный буквальное для междунаров() с основанием 10: «»

Я отправлю немного коды для каждой программы я пытаюсь сделать работу.

импорт последовательный и сделать что-то непосредственно образец кода:

import serial 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
from matplotlib import style 
import time 
import re 

raw_buffer = '' 
ydata = [] 
ydata_changed = False 
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=None) 

style.use('fivethirtyeight') 

fig = plt.figure() 
ax1 = fig.add_subplot(1,1,1) 
while True: 


    waiting = ser.inWaiting() 
    if waiting > 0: 


     raw_buffer = raw_buffer + \ 
        ser.read(waiting).replace('\x00', '').replace('\n', '') 
     re.sub("[^[0-9]", "", raw_buffer) 


     raw = [int(x) for x in raw_buffer.split(' ,')] 

в текстовый файл и "назад"

import serial 
import time 
ser = serial.Serial('/dev/ttyUSB0', 9600) 
while True: 
    f = open('serial.txt', 'r+') 
    line = ser.readline().decode('utf-8') 
    f.write(line) 
    data = f.read() 
    try: 
     int(data) 
    except ValueError: 
      pass 
    time.sleep(1) 
    print int(data) 
    f.close() 

Те же ошибки каждый раз. Вот пример данных:

177,177,178,178,178,178,178,179,178,178 

Заранее благодарим за любые советы, которые вы можете дать мне.

ответ

1

Проблема raw_buffer.split(' ,') расщепляется на " ,", не "," или " ", так split не работает для ваших данных и возвращает ["177,177,178,178,178,178,178,179,178,178"], который не является списком целых чисел в виде строки.

raw_buffer.split(',') работает, даже если есть пробелы до/после запятой, потому что преобразование в int может справиться с этим.

Antther вопрос, если ваши строки заканчиваются с запятой, поэтому он будет генерировать дополнительную пустую строку, мы должны отфильтровать, как это:

raw = [int(x) for x in raw_buffer.split(',') if x] 

Если вы не знаете, разделитель заранее, рассмотрите возможность использования регулярного выражения:

raw = [int(x) for x in re.split(r"[\s,]+",raw_buffer) if x] 
+0

Я пробовал итерации. Ниже приведены сообщения об ошибках. Я сейчас попробую его с текстовым файлом. сырец = [Int (х) при х в re.split (г "[\ с,] +", raw_buffer)] ValueError: недействительный буквальным для Int() с основанием 10: '' сырец = [INT (x) для x в raw_buffer.split (',')] ValueError: недействительный литерал для int() с базой 10: '' – keakins13

+0

После «import re» в следующем наборе кода я получаю те же ошибки: raw = [int (x) для x в re.split (r "[\ s,] +", data)] ValueError: недействительный литерал для int() с базой 10: '' – keakins13

+0

Возможно, я неправильно понял. Вы можете напечатать 'raw_buffer'? –