使用pySerial时Python出现输入/输出错误
我有一个Python脚本,它通过pySerial把数据包写入Arduino板。有时候,在把代码写入板子的时候,pySerial会出现一个输入/输出错误,错误代码是5。
经过一些研究,我发现这个错误表示在写入代表与Arduino板连接的文件时出现了问题。
发送的代码只发送单字节的数据包:
try:
# Check if it's already a single byte
if isinstance(byte, str):
if len(byte) == 1: # It is. Send it.
self.serial.write(byte)
else: # It's not
raise PacketException
# Check if it's an integer
elif isinstance(byte, int):
self.serial.write(chr(byte)) # It is; convert it to a byte and send it
else: raise PacketException # I don't know what this is.
except Exception as ex:
print("Exception is: " + ex.__getitem__() + " " + ex.__str__())
这个代码打印出的错误信息是:
操作系统错误 输入/输出错误 错误代码5
在发送数据时,我的代码有没有什么问题?我需要检查串口连接是否准备好发送数据吗?还是说在发送后需要加个延迟?或者可能是硬件本身或者与硬件的连接出现了问题?
编辑:我查看了pyserial在Linux上的实现,发现它只是把错误传递给了我的代码,所以从那里没有得到新的实际见解。有没有好的方法来测试程序中发生了什么?
4 个回答
1
我看到你代码里唯一明显的问题就是缩进不对。你可以把代码改成这样:
try:
# Check if it's already a single byte
if isinstance(byte, str):
if len(byte) == 1: # It is. Send it.
self.serial.write(byte)
else: # It's not
raise PacketException
# else, check if it's an integer
elif isinstance(byte, int):
self.serial.write(chr(byte)) # It is; convert it to a byte and send it
else:
raise PacketException # I don't know what this is.
except Exception as ex:
print("Exception is: " + ex.__getitem__() + " " + ex.__str__())
我不太确定这个问题是不是导致你出错的原因,但你可以试试这样做,然后告诉我们结果!你在检查 byte
是否是 int
时,只在它是 str
的情况下进行判断,所以 elif
这个条件总是会失败。不过我觉得如果你真实的代码缩进是这样的,你应该会遇到 SyntaxError
(语法错误),所以我猜测你在发帖时出错了,真正的问题可能还没被发现。
1
如果你在Windows上运行这个,记得不要同时打开Arduino IDE并且和串口连接,这样的话再运行你的Python脚本就会出现同样的错误。
3
抱歉打扰你了,但我很确定这个错误是因为Arduino自己重启了,所以它和电脑的连接就断开了。