我正在编写一个使用pyserial模块的Python程序。该程序旨在读取Arduino模块的输出。我可以打开一个串行对象:
ser = serial.Serial('/dev/cu.usbmodem641', 9600)
然后我可以用它来阅读:
line = ser.readline()
但是,我希望能够处理在没有连接Arduino模块的情况下启动程序时引发的异常。引发的异常是:
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/serial/serialposix.py", line 292, in open
raise SerialException(msg.errno, "could not open port %s: %s" % (self._port, msg))
如果我尝试在主程序中使用常规try/except
块来捕获它,则它不会被捕获。我尝试从SerialException
导入serialposix.py
,但这不起作用。
我是否需要通过线程弄脏手,还是有其他方法来解决这个问题?抛出异常时,我想调用time.sleep(5)
,然后重试,直到连接可用。
答案 0 :(得分:1)
您可以导入serial.SerialException
并抓住它:
from serial import SerialException
try:
line = ser.readline()
except SerialException:
time.sleep(5)
异常是IOError
的子类,所以你也可以使用它,但是你可能会捕获由于端口尚未可用以外的其他原因而引发的异常。