捕获导入模块中引发的异常
Catching exceptions raised in imported modules
我正在编写一个使用 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
块来捕捉它,它不会被捕捉到。我试过从 serialposix.py
导入 SerialException
但这不起作用。
我是否需要亲自动手处理线程,或者是否有其他处理方法?当抛出异常时,我想调用 time.sleep(5)
然后重试直到连接可用。
您可以导入 serial.SerialException
并捕获:
from serial import SerialException
try:
line = ser.readline()
except SerialException:
time.sleep(5)
该异常是 IOError
的子类,因此您也可以使用它,但是您可能会捕获由于端口尚不可用以外的原因抛出的异常。
我正在编写一个使用 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
块来捕捉它,它不会被捕捉到。我试过从 serialposix.py
导入 SerialException
但这不起作用。
我是否需要亲自动手处理线程,或者是否有其他处理方法?当抛出异常时,我想调用 time.sleep(5)
然后重试直到连接可用。
您可以导入 serial.SerialException
并捕获:
from serial import SerialException
try:
line = ser.readline()
except SerialException:
time.sleep(5)
该异常是 IOError
的子类,因此您也可以使用它,但是您可能会捕获由于端口尚不可用以外的原因抛出的异常。