python报错问题

用pycharm实现串口通信,代码出现未知报错,希望大家可以帮帮忙

以下为代码:

mport serial
from pickle import TRUE
import csv
import serial.tools.list_ports
import  threading
import time
import numpy as np
import matplotlib.pyplot as plt
def find_serial():
    port_list=list(serial.tools.list_ports.comports())
    if len(port_list)==0:
        print('找不到串口')
    else:
        for i in  range(0,len(port_list)):
            print(port_list[i])
POWER_DATA=[]
def recieve_data(a):
    NO=['']
    n=0
    s=True
    while s:
        portx="COM1"
        bps=115200
        timex=1
        ser = serial.Serial(portx, int(bps), timeout=timex)
        data1=ser.readline().decode("gbk")
        if data1 !='':
            n=n+1
            print(n,type(n))
            text="数据"+str(n)+"已经收到\r\n"
            result=ser.write(text.encode("gbk"))
            print("写总字节数:",result)
            data1=data1.rstrip('\r\n')
            data=data1.split(",")
            print((data))
            POWER_DATA.append(data)
            print(POWER_DATA)
            if n==10:
                s=0
        ser.close()
        time.sleep(0.1)
def draw(a):
    y=[]
    for i in a:
        print(i[0])
        y.append(i[0])
    x=np.linspace(1,10,10,endpoint=True)
    plt.plot(np.array(x),np.array(y))
    plt.show()

if __name__=='__main__':
  t1=threading.Thread(target=recieve_data, args=("t1",))
  t1.start()
  t1.join()
  draw(POWER_DATA)

以下是报错类型:


Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Administrator\PycharmProjects\pythonProject1\3.py", line 25, in recieve_data
    ser = serial.Serial(portx, int(bps), timeout=timex)
  File "C:\Users\Administrator\venv\lib\site-packages\serial\serialwin32.py", line 33, in __init__
    super(Serial, self).__init__(*args, **kwargs)
  File "C:\Users\Administrator\venv\lib\site-packages\serial\serialutil.py", line 244, in __init__
    self.open()
  File "C:\Users\Administrator\venv\lib\site-packages\serial\serialwin32.py", line 64, in open
    raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port 'COM1': FileNotFoundError(2, '系统找不到指定的文件。', None, 2)
Traceback (most recent call last):
  File "C:\Users\Administrator\PycharmProjects\pythonProject1\3.py", line 55, in <module>
    draw(POWER_DATA)
  File "C:\Users\Administrator\PycharmProjects\pythonProject1\3.py", line 48, in draw
    plt.plot(np.array(x),np.array(y))
  File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\pyplot.py", line 2812, in plot
    return gca().plot(
  File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\axes\_axes.py", line 1688, in plot
    lines = [*self._get_lines(*args, data=data, **kwargs)]
  File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\axes\_base.py", line 311, in __call__
    yield from self._plot_args(
  File "C:\Users\Administrator\venv\lib\site-packages\matplotlib\axes\_base.py", line 504, in _plot_args
    raise ValueError(f"x and y must have same first dimension, but "
ValueError: x and y must have same first dimension, but have shapes (10,) and (0,)

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

引用 皆我百晓生 小程序回复内容作答:
根据报错信息,可以看出存在两个问题:

  1. 串口无法打开,报错信息为:SerialException: could not open port 'COM1': FileNotFoundError(2, '系统找不到指定的文件。', None, 2),可能是由于COM1串口不存在或者被其他程序占用了。你可以尝试修改portx的值为可用的串口。

  2. 在调用draw函数时,报错信息为:ValueError: x and y must have same first dimension, but have shapes (10,) and (0,),这是由于POWER_DATA为空导致的。在draw函数之前,你已经将t1线程完成,但是可能还没有收到数据就进行了绘图操作。你可以在draw函数之前添加一个time.sleep()的延时,确保数据已经收到后再进行绘图操作。例如:

    time.sleep(1)  # 延时1秒,时间可以根据实际情况调整
    draw(POWER_DATA)