I have code which read data from serial port.
try:
dataIn = self.port.read(100)
except serial.SerialException:
#do some work
return None
If I disconnect device I catch exception which I can't handle someway.
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/serial/serialposix.py", line 475, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/katkov/work/obd2rds/obd2rds/testing/python/main.py", line 48, in <module>
main()
File "/home/katkov/work/obd2rds/obd2rds/testing/python/main.py", line 41, in main
dataIn = serPort.read()
File "/home/katkov/work/obd2rds/obd2rds/testing/python/uart.py", line 55, in read
dataIn = self.port.read(100)
File "/usr/local/lib/python3.4/dist-packages/serial/serialposix.py", line 480, in read
if e[0] != errno.EAGAIN:
TypeError: 'SerialException' object does not support indexing
How can I catch exception that it is processed properly. Thanks!
Thanks for Jonathan Eunice! Your advice fixed my issue.
Now I use following code:
try:
dataIn = self.port.read()
except serial.SerialException as e:
#There is no new data from serial port
return None
except TypeError as e:
#Disconnect of USB->UART occured
self.port.close()
return None
else:
#Some data was received
return dataIn
You aren't sharing your complete code, but if you're trying to index out your error number, that's not going to work AFAIK. Try:
try:
dataIn = self.port.read(100)
except serial.SerialException as e:
# ...
if e.errno != errno.EAGAIN:
# ...
Also, if you are doing work inside an exception handler that may lead to further exceptions, then nest the handlers. E.g.:
try:
dataIn = self.port.read(100)
except serial.SerialException as e:
try:
# more dangerous stuff
except serial.SerialException as e2:
# handle nested expression
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With