You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyserial发送bytearray元素报错:invalid literal for int() with base 16: ''

解决pyserial逐个发送字节的错误问题

问题核心

你的代码报错有两个关键原因:

  1. pyserial的port.write()方法仅接受bytes-like对象(如bytes、bytearray),但循环中从bytearray.fromhex(packet)取出的b是单个整数类型,直接传入会触发类型不兼容的底层错误。
  2. 错误提示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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:35:20