From 1b1d1b531c74373d5b69bce73b204ebc8c5e2f93 Mon Sep 17 00:00:00 2001 From: volconst <20997907+volconst@users.noreply.github.com> Date: Wed, 28 Jul 2021 14:42:52 +0300 Subject: Sync with python exception type changes select.error is OSError since python 3.3. Rely on self.printer_tcp to differentiate between them. Related to #1204, but not sure if it fixes it, as I did not reproduce the problem. --- printrun/printcore.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/printrun/printcore.py b/printrun/printcore.py index eaa774d..8e84923 100644 --- a/printrun/printcore.py +++ b/printrun/printcore.py @@ -350,24 +350,28 @@ class printcore(): self.logError(_("Got rubbish reply from %s at baudrate %s:") % (self.port, self.baud) + "\n" + _("Maybe a bad baudrate?")) return None - except SelectError as e: - if 'Bad file descriptor' in e.args[1]: - self.logError(_("Can't read from printer (disconnected?) (SelectError {0}): {1}").format(e.errno, decode_utf8(e.strerror))) - return None - else: - self.logError(_("SelectError ({0}): {1}").format(e.errno, decode_utf8(e.strerror))) - raise except SerialException as e: self.logError(_("Can't read from printer (disconnected?) (SerialException): {0}").format(decode_utf8(str(e)))) return None except socket.error as e: self.logError(_("Can't read from printer (disconnected?) (Socket error {0}): {1}").format(e.errno, decode_utf8(e.strerror))) return None - except OSError as e: - if e.errno == errno.EAGAIN: # Not a real error, no data was available - return "" - self.logError(_("Can't read from printer (disconnected?) (OS Error {0}): {1}").format(e.errno, e.strerror)) - return None + except (OSError, SelectError) as e: + # OSError and SelectError are the same thing since python 3.3 + if self.printer_tcp: + # SelectError branch, assume select is used only for socket printers + if len(e.args) > 1 and 'Bad file descriptor' in e.args[1]: + self.logError(_("Can't read from printer (disconnected?) (SelectError {0}): {1}").format(e.errno, decode_utf8(e.strerror))) + return None + else: + self.logError(_("SelectError ({0}): {1}").format(e.errno, decode_utf8(e.strerror))) + raise + else: + # OSError branch, serial printers + if e.errno == errno.EAGAIN: # Not a real error, no data was available + return "" + self.logError(_("Can't read from printer (disconnected?) (OS Error {0}): {1}").format(e.errno, e.strerror)) + return None def _listen_can_continue(self): if self.printer_tcp: -- cgit v1.2.3