diff options
Diffstat (limited to 'mako/exceptions.py')
-rw-r--r-- | mako/exceptions.py | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/mako/exceptions.py b/mako/exceptions.py index dcd6a64..b8b7747 100644 --- a/mako/exceptions.py +++ b/mako/exceptions.py @@ -19,7 +19,9 @@ def _format_filepos(lineno, pos, filename): if filename is None: return " at line: %d char: %d" % (lineno, pos) else: - return " in file '%s' at line: %d char: %d" % (filename, lineno, pos) + return " in file '%s' at line: %d char: %d" % (filename, lineno, pos) + + class CompileException(MakoException): def __init__(self, message, source, lineno, pos, filename): MakoException.__init__(self, message + _format_filepos(lineno, pos, filename)) @@ -35,6 +37,9 @@ class SyntaxException(MakoException): self.pos = pos self.filename = filename self.source = source + +class UnsupportedError(MakoException): + """raised when a retired feature is used.""" class TemplateLookupException(MakoException): pass @@ -130,17 +135,19 @@ class RichTraceback(object): template_filename = info.template_filename or filename except KeyError: # A normal .py file (not a Template) - try: - fp = open(filename) - encoding = util.parse_encoding(fp) - fp.close() - except IOError: - encoding = None - if encoding: - line = line.decode(encoding) - else: - line = line.decode('ascii', 'replace') - new_trcback.append((filename, lineno, function, line, None, None, None, None)) + if not util.py3k: + try: + fp = open(filename, 'rb') + encoding = util.parse_encoding(fp) + fp.close() + except IOError: + encoding = None + if encoding: + line = line.decode(encoding) + else: + line = line.decode('ascii', 'replace') + new_trcback.append((filename, lineno, function, line, + None, None, None, None)) continue template_ln = module_ln = 1 @@ -161,7 +168,9 @@ class RichTraceback(object): template_line = template_lines[template_ln - 1] else: template_line = None - new_trcback.append((filename, lineno, function, line, template_filename, template_ln, template_line, template_source)) + new_trcback.append((filename, lineno, function, + line, template_filename, template_ln, + template_line, template_source)) if not self.source: for l in range(len(new_trcback)-1, 0, -1): if new_trcback[l][5]: @@ -171,7 +180,7 @@ class RichTraceback(object): else: try: # A normal .py file (not a Template) - fp = open(new_trcback[-1][0]) + fp = open(new_trcback[-1][0], 'rb') encoding = util.parse_encoding(fp) fp.seek(0) self.source = fp.read() |