diff options
author | volconst <20997907+volconst@users.noreply.github.com> | 2021-07-28 14:42:52 +0300 |
---|---|---|
committer | volconst <20997907+volconst@users.noreply.github.com> | 2021-07-28 14:42:52 +0300 |
commit | 1b1d1b531c74373d5b69bce73b204ebc8c5e2f93 (patch) | |
tree | 93bdd9ceca93dda63b68128c4f2a5e7628b2cd3d | |
parent | a6e58b2dca5f0b3ef4c6fd8c5806f1541b48ec5d (diff) |
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.
-rw-r--r-- | printrun/printcore.py | 28 |
1 files 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: |