a bytes-like object is required, not 'str' 오류 질문있습니다.
조회수 1681회
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator
import numpy as np
import serial #Import Serial Library
import time
from time import sleep
arduinoSerialData = serial.Serial('COM6',115200) #Create Serial port object called arduinoSerialData
size_of_the_matrix = 5
x, y = np.meshgrid(np.linspace(0,5,6), np.linspace(0,5,6)) #each axis is from 0 to 3 devided in 4 sections
distances_matrix = np.zeros((size_of_the_matrix,size_of_the_matrix))
fig = plt.figure(figsize=None,facecolor='white')
ax2 = plt.subplot()
quad1 = ax2.pcolormesh(x,y,distances_matrix,vmin=0,vmax=3000,shading='flat')
bar = fig.colorbar(quad1, ax=ax2)
bar.set_label("Ranges in each ROI (mm)")
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
def init():
quad1.set_array([])
return quad1
def animate(iter):
global distances_matrix
if (arduinoSerialData.inWaiting()>0): #Check if data is on the serial port
data_receving_from_arduino_as_string= arduinoSerialData.readline()
distances_in_string = data_receving_from_arduino_as_string.split(',') #Convering the data received from the arduino from string to a float
distances_in_string.pop()
distances = [float(i) for i in distances_in_string]
if(len(distances)==size_of_the_matrix*size_of_the_matrix):
distances_matrix = np.reshape(distances, (size_of_the_matrix, size_of_the_matrix))
b = distances_matrix[:,0:1]
#print b
a = distances_matrix [:,1:5]
#print a
c = np.concatenate((a,b), axis =1)
distances_matrix = np.flipud(c)
#distances_matrix = c
#print distances_matrix
quad1.set_array(distances_matrix.ravel())
anim = animation.FuncAnimation(fig,animate ,interval=100,blit=False,repeat=False)
plt.show()
이코드에서 제목과같은 오류가 발생해 distances = [float(i) for i in distances_in_string] 부분을 distances = [float(i.decode()) for i in distances_in_string] 와같은 방식으로 바꿔봐도 해결이 되지않습니다. 어디가 잘못된걸까요?
에러메세지 전문은 아래와 같습니다!
PS C:\Users\hjj96> & python "c:/Users/hjj96/Desktop/Lidar-using-VL53L1X- master/Files_for_demo/Files for demo/Read_and_plot_2d_map.py"
Traceback (most recent call last):
File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\backend_bases.py", line 1216, in _on_timer
ret = func(*args, **kwargs)
File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1477, in _step
still_going = super()._step(*args)
File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1189, in _step
self._dra w_next_frame(framedata, self._blit)
File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1208, in _draw_next_frame
self._draw_frame(framedata)
File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1776, in _draw_frame
self._drawn_artists = self._func(framedata, *self._args)
File "c:/Users/hjj96/Desktop/Lidar-using-VL53L1X-master/Files_for_demo/Files for demo/Read_and_plot_2d_map.py", line 44, in animate
distances_in_string = data_receving_from_arduino_as_string.split(',') #Convering the data received from the arduino from string to a float
TypeError: a bytes-like object is required, not 'str'
1 답변
-
data_receving_from_arduino_as_string.split(',') 에서 a bytes-like object is required, not 'str' 이 발생했다면, data_receving_from_arduino_as_string 가 스트링이 아니라 byte-array 이라는 말 같아요.
>>> s = b'abcde' >>> s.split('c') Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> s.split('c') TypeError: a bytes-like object is required, not 'str'
이렇게 같은 에러를 재현할 수 있습니다.
이걸 고치려면, 바이트어레이를 스트링(',')으로 쪼개려다가 에러가 발생한 것이기 때문에, 그냥 b','로 쪼개보면 에러가 발생하지 않을 겁니다.
>>> s = b'abcde' >>> s.split('c') Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> s.split('c') TypeError: a bytes-like object is required, not 'str' >>> s.split(b'c') [b'ab', b'de']
댓글 입력