diff --git a/src/octoprint/util/__init__.py b/src/octoprint/util/__init__.py index c16dbeef..ea4012a3 100644 --- a/src/octoprint/util/__init__.py +++ b/src/octoprint/util/__init__.py @@ -389,7 +389,11 @@ def silent_remove(file): def sanitize_ascii(line): - return unicode(line, 'ascii', 'replace').encode('ascii', 'replace').rstrip() + if not isinstance(line, basestring): + raise ValueError("Expected either str or unicode but got {} instead".format(line.__class__.__name__ if line is not None else None)) + if isinstance(line, str): + line = unicode(line, 'ascii', 'replace') + return line.encode('ascii', 'replace').rstrip() def filter_non_ascii(line): diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index ab8cbea4..4062e743 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -1250,7 +1250,13 @@ class MachineCom(object): if ret == '': #self._log("Recv: TIMEOUT") return '' - self._log("Recv: %s" % sanitize_ascii(ret)) + + try: + self._log("Recv: %s" % sanitize_ascii(ret)) + except ValueError as e: + self._log("WARN: While reading last line: %s" % e) + self._log("Recv: %r" % ret) + return ret def _getNext(self):