Merged revisions 71237-71238 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71237 | georg.brandl | 2009-04-05 16:24:52 +0200 (So, 05 Apr 2009) | 1 line

  #1326077: fix traceback formatting of SyntaxErrors.  This fixes two differences with formatting coming from Python: a) the reproduction of location details in the error message if no line text is given, b) the prefixing of the last line by one space.
........
  r71238 | georg.brandl | 2009-04-05 16:25:41 +0200 (So, 05 Apr 2009) | 1 line

  Add NEWS entry for r71237.
........
This commit is contained in:
Georg Brandl 2009-04-05 14:28:42 +00:00
parent dfd734429e
commit 236f7979ba
3 changed files with 22 additions and 16 deletions

View file

@ -10,16 +10,6 @@ from test.support import TESTFN, unlink
import traceback import traceback
try:
raise KeyError
except KeyError:
type_, value, tb = sys.exc_info()
file_ = StringIO()
traceback_print(tb, file_)
example_traceback = file_.getvalue()
else:
raise Error("unable to create test traceback string")
class SyntaxTracebackCases(unittest.TestCase): class SyntaxTracebackCases(unittest.TestCase):
# For now, a very minimal set of tests. I want to be sure that # For now, a very minimal set of tests. I want to be sure that
@ -158,9 +148,24 @@ class SyntaxTracebackCases(unittest.TestCase):
class TracebackFormatTests(unittest.TestCase): class TracebackFormatTests(unittest.TestCase):
def test_traceback_indentation(self): def test_traceback_format(self):
try:
raise KeyError('blah')
except KeyError:
type_, value, tb = sys.exc_info()
traceback_fmt = 'Traceback (most recent call last):\n' + \
''.join(traceback.format_tb(tb))
file_ = StringIO()
traceback_print(tb, file_)
python_fmt = file_.getvalue()
else:
raise Error("unable to create test traceback string")
# Make sure that Python and the traceback module format the same thing
self.assertEquals(traceback_fmt, python_fmt)
# Make sure that the traceback is properly indented. # Make sure that the traceback is properly indented.
tb_lines = example_traceback.splitlines() tb_lines = python_fmt.splitlines()
self.assertEquals(len(tb_lines), 3) self.assertEquals(len(tb_lines), 3)
banner, location, source_line = tb_lines banner, location, source_line = tb_lines
self.assert_(banner.startswith('Traceback')) self.assert_(banner.startswith('Traceback'))

View file

@ -63,7 +63,7 @@ def print_tb(tb, limit=None, file=None):
filename = co.co_filename filename = co.co_filename
name = co.co_name name = co.co_name
_print(file, _print(file,
' File "%s", line %d, in %s' % (filename,lineno,name)) ' File "%s", line %d, in %s' % (filename, lineno, name))
linecache.checkcache(filename) linecache.checkcache(filename)
line = linecache.getline(filename, lineno, f.f_globals) line = linecache.getline(filename, lineno, f.f_globals)
if line: _print(file, ' ' + line.strip()) if line: _print(file, ' ' + line.strip())
@ -159,9 +159,8 @@ def print_exception(etype, value, tb, limit=None, file=None, chain=True):
_print(file, 'Traceback (most recent call last):') _print(file, 'Traceback (most recent call last):')
print_tb(tb, limit, file) print_tb(tb, limit, file)
lines = format_exception_only(type(value), value) lines = format_exception_only(type(value), value)
for line in lines[:-1]: for line in lines:
_print(file, line, ' ') _print(file, line, '')
_print(file, lines[-1], '')
def format_exception(etype, value, tb, limit=None, chain=True): def format_exception(etype, value, tb, limit=None, chain=True):
"""Format a stack trace and the exception information. """Format a stack trace and the exception information.

View file

@ -327,6 +327,8 @@ Core and Builtins
Library Library
------- -------
- Issue 1326077: fix the formatting of SyntaxErrors by the traceback module.
- Issue #1665206 (partially): Move imports in cgitb to the top of the module - Issue #1665206 (partially): Move imports in cgitb to the top of the module
instead of performing them in functions. Helps prevent import deadlocking in instead of performing them in functions. Helps prevent import deadlocking in
threads. threads.