1、在执行serial.tools.list_ports.comports()函数时,只导入import serial
import serial # import serial.tools.list_ports class UDSCommunication: def __init__(self): self.ports = serial.tools.list_ports.comports() self.wanted_description="USB Serial Port" self.port_t = None def strat(self,port): self.ser = serial.Serial(port, 9600, 8, "E", timeout=50, stopbits=1) def Find_Com(self): for p in self.ports: if self.wanted_description in p.description: self.port_t = p.device break def close_connection(self): self.ser.close() if __name__ == "__main__": uds_communication = UDSCommunication() uds_communication.Find_Com() print(uds_communication.port_t) uds_communication.strat(uds_communication.port_t)
运行报错
Traceback (most recent call last): File "C:\Users\Thinkpad\Desktop\Read_Com\LonHand_Class.py", line 27, in <module> uds_communication = UDSCommunication() File "C:\Users\Thinkpad\Desktop\Read_Com\LonHand_Class.py", line 5, in __init__ self.ports = serial.tools.list_ports.comports() AttributeError: module 'serial' has no attribute 'tools' Process finished with exit code 1
追究原因是该调用的对象在serial目录下面还有一层tool目录,
C:\Users\Thinkpad\AppData\Local\Programs\Python\Python39\Lib\site-packages\serial\tools
2、正确的操作
import serial import serial.tools.list_ports class UDSCommunication: def __init__(self): self.ports = serial.tools.list_ports.comports() self.wanted_description="USB Serial Port" self.port_t = None def strat(self,port): self.ser = serial.Serial(port, 9600, 8, "E", timeout=50, stopbits=1) def Find_Com(self): for p in self.ports: if self.wanted_description in p.description: self.port_t = p.device break def close_connection(self): self.ser.close() if __name__ == "__main__": uds_communication = UDSCommunication() uds_communication.Find_Com() print(uds_communication.port_t) uds_communication.strat(uds_communication.port_t)
运行结果
C:\Users\Thinkpad\AppData\Local\Programs\Python\Python39\python.exe C:/Users/Thinkpad/Desktop/Read_Com/LonHand_Class.py COM8 Process finished with exit code 0