捕获导入模块中引发的异常

时间:2015-04-11 10:14:15

标签: python exception-handling

我正在编写一个使用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),然后重试,直到连接可用。

1 个答案:

答案 0 :(得分:1)

您可以导入serial.SerialException并抓住它:

from serial import SerialException

try:
    line = ser.readline()
except SerialException:
    time.sleep(5)

异常是IOError的子类,所以你也可以使用它,但是你可能会捕获由于端口尚未可用以外的其他原因而引发的异常。