Python与Arduino串口通信报错:ABCMeta参数需为映射而非元组
解决serial.Serial初始化时的TypeError问题
错误原因
你代码里的**('timeout',)写法完全错误:**运算符要求后面必须跟映射类型(比如Python字典),用来解包关键字参数,但你传的是一个元组('timeout',),不符合语法要求,所以触发TypeError。
正确写法
要设置timeout参数,直接用关键字参数传递即可,或者用字典解包(适用于参数较多的场景):
方式1:直接传关键字参数(推荐)
# timeout值根据需求设置,比如1秒,设为None表示永不超时 arduino = serial.Serial(com, 115200, 0, timeout=1)
方式2:字典解包(参数存于字典时使用)
serial_kwargs = {'timeout': 1} arduino = serial.Serial(com, 115200, 0, **serial_kwargs)
额外优化建议
第三个参数0对应的是bytesize参数,直接用serial模块的常量可读性更高,比如:
import serial # 替换成你的实际串口名,比如COM3(Windows)或/dev/ttyUSB0(Linux) com_port = 'COM3' arduino = serial.Serial(com_port, 115200, serial.EIGHTBITS, timeout=1)
内容的提问来源于stack exchange,提问作者Snn
相关产品推荐
相关产品推荐

