Pyserial发送bytearray元素报错:invalid literal for int() with base 16: ''
解决pyserial逐个发送字节的错误问题
问题核心
你的代码报错有两个关键原因:
- pyserial的
port.write()方法仅接受bytes-like对象(如bytes、bytearray),但循环中从bytearray.fromhex(packet)取出的b是单个整数类型,直接传入会触发类型不兼容的底层错误。 - 错误提示
invalid literal for int() with base 16: '',可能伴随packet字符串存在空值或格式不合法的情况,但优先解决字节传递的问题。
修正代码
将单个整数转换为长度为1的bytes对象后再发送,修改后的代码如下:
from time import sleep #------------ start debug ----------------- for b in bytearray.fromhex(packet): self.port.write(bytes([b])) # 把单int转为bytes对象 sleep(0.1) #------------- end debug ------------------
可选替代写法
也可以用bytearray来包装单字节,效果完全一致:
self.port.write(bytearray([b]))
额外排查建议
如果修改后仍出现十六进制转换错误,检查packet参数:
- 确保字符串无空字符、空格或非十六进制字符(
fromhex支持大小写字母,比如"01fdff00"也是合法的) - 调用时传入的
"01FDFF00"是合法格式,但如果存在其他异常输入(比如空字符串),会触发转换失败
内容的提问来源于stack exchange,提问作者Edwin Fairchild
相关产品推荐
相关产品推荐

