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):
|
def syntax_error_bad_indentation(self):
|
||||||
compile("def spam():\n print 1\n print 2", "?", "exec")
|
compile("def spam():\n print 1\n print 2", "?", "exec")
|
||||||
|
|
||||||
|
def syntax_error_bad_indentation2(self):
|
||||||
|
compile(" print(2)", "?", "exec")
|
||||||
|
|
||||||
def test_caret(self):
|
def test_caret(self):
|
||||||
err = self.get_exception_format(self.syntax_error_with_caret,
|
err = self.get_exception_format(self.syntax_error_with_caret,
|
||||||
SyntaxError)
|
SyntaxError)
|
||||||
|
@ -111,6 +114,13 @@ def test():
|
||||||
os.unlink(os.path.join(testdir, f))
|
os.unlink(os.path.join(testdir, f))
|
||||||
os.rmdir(testdir)
|
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):
|
def test_base_exception(self):
|
||||||
# Test that exceptions derived from BaseException are formatted right
|
# Test that exceptions derived from BaseException are formatted right
|
||||||
e = KeyboardInterrupt()
|
e = KeyboardInterrupt()
|
||||||
|
|
|
@ -189,11 +189,12 @@ def format_exception_only(etype, value):
|
||||||
if badline is not None:
|
if badline is not None:
|
||||||
lines.append(' %s\n' % badline.strip())
|
lines.append(' %s\n' % badline.strip())
|
||||||
if offset is not None:
|
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
|
# non-space whitespace (likes tabs) must be kept for alignment
|
||||||
caretspace = ((c.isspace() and c or ' ') for c in caretspace)
|
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
|
value = msg
|
||||||
|
|
||||||
lines.append(_format_final_exc_line(stype, value))
|
lines.append(_format_final_exc_line(stype, value))
|
||||||
|
|
|
@ -9,6 +9,9 @@ What's New in Python 2.7.7?
|
||||||
Core and Builtins
|
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
|
- 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
|
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
|
already cached the zip's table of contents we detect this and recover
|
||||||
|
|
Loading…
Reference in New Issue