def __init__(self, message, source, pos): self.message = message self.source = source self.pos = pos text, offsets = source[:2] self.lineno, self.offset = pos2lineno(pos, offsets) self.line = getline(text, offsets, self.lineno) Exception.__init__(self, '%s: %s' % (message, self.line))
def format_exc(info=None, context=5): if info: exc_type, exc_value, tb = info else: exc_type, exc_value, tb = sys.exc_info() try: exc_msg = restore_escapes(exc_value) while tb.tb_next is not None: module = tb.tb_frame.f_globals.get('__name__') or '?' if module == 'pony' or module.startswith('pony.'): tb = tb.tb_next else: break records = [] if issubclass(exc_type, SyntaxError) and exc_value.filename and exc_value.filename != '<?>': lines, index = getlines2(exc_value.filename, exc_value.lineno, context=5) source_encoding = detect_source_encoding(exc_value.filename) formatted_lines = [] for i, line in enumerate(lines): syntax_error_offset = None if i == index: syntax_error_offset = exc_value.offset - 1 formatted_lines.append(format_line(None, line.decode(source_encoding, 'replace'), syntax_error_offset)) record = Record(module='<?>', filename=exc_value.filename, lineno=exc_value.lineno, lines=formatted_lines, index=index) records = [ record ] else: frames = inspect.getinnerframes(tb, context) prev_frame = None for frame, filename, lineno, func, lines, index in frames: if index is None: continue module = frame.f_globals.get('__name__') or '?' source_encoding = detect_source_encoding(filename) formatted_lines = [ format_line(frame, line.decode(source_encoding, 'replace')) for line in lines ] record = Record(module=module, filename=filename, lineno=lineno, lines=formatted_lines, index=index, func=func) records.append(record) if module != 'pony.templating': pass elif func in ('_eval', '_compile'): element = prev_frame.f_locals['elem'] # instance of SyntaxElement subclass text, offsets, filename = (element.source + (None,))[:3] lineno, offset = pos2lineno(element.start, offsets) lines, index = getlines(text, offsets, lineno, context=5) record = Record(module='<template>', filename=filename, lineno=lineno, lines=lines, index=index) records.append(record) prev_frame = frame if issubclass(exc_type, ParseError): text, offsets = exc_value.source[:2] lines, index = getlines(text, offsets, exc_value.lineno, context=5) record = Record(module='<template>', filename='<?>', lineno=exc_value.lineno, lines=lines, index=index) records.append(record) return html() finally: del tb
def format_exc(info=None, context=5): if info: exc_type, exc_value, tb = info else: exc_type, exc_value, tb = sys.exc_info() try: exc_msg = restore_escapes(exc_value) while tb.tb_next is not None: module = tb.tb_frame.f_globals.get('__name__') or '?' if module == 'pony' or module.startswith('pony.'): tb = tb.tb_next else: break records = [] if issubclass(exc_type, SyntaxError ) and exc_value.filename and exc_value.filename != '<?>': lines, index = getlines2(exc_value.filename, exc_value.lineno, context=5) source_encoding = detect_source_encoding(exc_value.filename) formatted_lines = [] for i, line in enumerate(lines): syntax_error_offset = None if i == index: syntax_error_offset = exc_value.offset - 1 formatted_lines.append( format_line(None, line.decode(source_encoding, 'replace'), syntax_error_offset)) record = Record(module='<?>', filename=exc_value.filename, lineno=exc_value.lineno, lines=formatted_lines, index=index) records = [record] else: frames = inspect.getinnerframes(tb, context) prev_frame = None for frame, filename, lineno, func, lines, index in frames: if index is None: continue module = frame.f_globals.get('__name__') or '?' source_encoding = detect_source_encoding(filename) formatted_lines = [ format_line(frame, line.decode(source_encoding, 'replace')) for line in lines ] record = Record(module=module, filename=filename, lineno=lineno, lines=formatted_lines, index=index, func=func) records.append(record) if module != 'pony.templating': pass elif func in ('_eval', '_compile'): element = prev_frame.f_locals[ 'elem'] # instance of SyntaxElement subclass text, offsets, filename = (element.source + (None, ))[:3] lineno, offset = pos2lineno(element.start, offsets) lines, index = getlines(text, offsets, lineno, context=5) record = Record(module='<template>', filename=filename, lineno=lineno, lines=lines, index=index) records.append(record) prev_frame = frame if issubclass(exc_type, ParseError): text, offsets = exc_value.source[:2] lines, index = getlines(text, offsets, exc_value.lineno, context=5) record = Record(module='<template>', filename='<?>', lineno=exc_value.lineno, lines=lines, index=index) records.append(record) return html() finally: del tb