Issue #17825: Cursor ^ is correctly positioned for SyntaxError and IndentationError.
This commit is contained in:
parent
70df667dfe
commit
edfd9addf6
|
@ -35,6 +35,9 @@ class TracebackCases(unittest.TestCase):
|
|||
def syntax_error_bad_indentation(self):
|
||||
compile("def spam():\n print 1\n print 2", "?", "exec")
|
||||
|
||||
def syntax_error_bad_indentation2(self):
|
||||
compile(" print(2)", "?", "exec")
|
||||
|
||||
def test_caret(self):
|
||||
err = self.get_exception_format(self.syntax_error_with_caret,
|
||||
SyntaxError)
|
||||
|
@ -111,6 +114,13 @@ def test():
|
|||
os.unlink(os.path.join(testdir, f))
|
||||
os.rmdir(testdir)
|
||||
|
||||
err = self.get_exception_format(self.syntax_error_bad_indentation2,
|
||||
IndentationError)
|
||||
self.assertEqual(len(err), 4)
|
||||
self.assertEqual(err[1].strip(), "print(2)")
|
||||
self.assertIn("^", err[2])
|
||||
self.assertEqual(err[1].find("p"), err[2].find("^"))
|
||||
|
||||
def test_base_exception(self):
|
||||
# Test that exceptions derived from BaseException are formatted right
|
||||
e = KeyboardInterrupt()
|
||||
|
|
|
@ -189,11 +189,12 @@ def format_exception_only(etype, value):
|
|||
if badline is not None:
|
||||
lines.append(' %s\n' % badline.strip())
|
||||
if offset is not None:
|
||||
caretspace = badline.rstrip('\n')[:offset].lstrip()
|
||||
caretspace = badline.rstrip('\n')
|
||||
offset = min(len(caretspace), offset) - 1
|
||||
caretspace = caretspace[:offset].lstrip()
|
||||
# non-space whitespace (likes tabs) must be kept for alignment
|
||||
caretspace = ((c.isspace() and c or ' ') for c in caretspace)
|
||||
# only three spaces to account for offset1 == pos 0
|
||||
lines.append(' %s^\n' % ''.join(caretspace))
|
||||
lines.append(' %s^\n' % ''.join(caretspace))
|
||||
value = msg
|
||||
|
||||
lines.append(_format_final_exc_line(stype, value))
|
||||
|
|
|
@ -9,6 +9,9 @@ What's New in Python 2.7.7?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #17825: Cursor "^" is correctly positioned for SyntaxError and
|
||||
IndentationError.
|
||||
|
||||
- Issue #19081: When a zipimport .zip file in sys.path being imported from
|
||||
is modified during the lifetime of the Python process after zipimport has
|
||||
already cached the zip's table of contents we detect this and recover
|
||||
|
|
Loading…
Reference in New Issue