8000 gh-82378 fix sys.tracebacklimit in pyrepl by cfbolz · Pull Request #123062 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

gh-82378 fix sys.tracebacklimit in pyrepl #123062

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prev Previous commit
Next Next commit
add another method to make things less weird from an OO perspective
  • Loading branch information
cfbolz committed Aug 16, 2024
commit e736e73cc9f300461478e9afa8c9e0af17fe7c64
10 changes: 6 additions & 4 deletions Lib/_pyrepl/console.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,13 @@ def __init__(
super().__init__(locals=locals, filename=filename, local_exit=local_exit) # type: ignore[call-arg]
self.can_colorize = _colorize.can_colorize()

def _showtraceback(se 8000 lf, typ, value, tb, colorize=False, limit=None):
def _excepthook(self, typ, value, tb):
import traceback
return super()._showtraceback(
typ, value, tb, colorize=self.can_colorize,
limit=traceback.BUILTIN_EXCEPTION_LIMIT)
lines = traceback.format_exception(
typ, value, tb,
colorize=self.can_colorize,
limit=traceback.BUILTIN_EXCEPTION_LIMIT)
self.write(''.join(lines))

def runsource(self, source, filename="<input>", symbol="single"):
try:
Expand Down
16 changes: 8 additions & 8 deletions Lib/code.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,18 +136,12 @@ def showtraceback(self):
finally:
typ = value = tb = None

def _showtraceback(self, typ, value, tb, colorize=False, limit=None):
# This method is being overwritten in
# _pyrepl.console.InteractiveColoredConsole to pass different values of
# colorize and limit
def _showtraceback(self, typ, value, tb):
sys.last_type = typ
sys.last_traceback = tb
sys.last_exc = sys.last_value = value = value.with_traceback(tb)
if sys.excepthook is sys.__excepthook__:
lines = traceback.format_exception(typ, value, tb,
colorize=colorize,
limit=limit)
self.write(''.join(lines))
self._excepthook(typ, value, tb)
else:
# If someone has set sys.excepthook, we let that take precedence
# over self.write
Expand All @@ -164,6 +158,12 @@ def _showtraceback(self, typ, value, tb, colorize=False, limit=None):
print('Original exception was:', file=sys.stderr)
sys.__excepthook__(typ, value, tb)

def _excepthook(self, typ, value, tb):
# This method is being overwritten in
# _pyrepl.console.InteractiveColoredConsole
lines = traceback.format_exception(typ, value, tb)
self.write(''.join(lines))

def write(self, data):
"""Write a string.

Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_pyrepl/test_pyrepl.py
5415
Original file line number Diff line number Diff line change
Expand Up @@ -1020,7 +1020,7 @@ def test_dumb_terminal_exits_cleanly(self):
env.update({"TERM": "dumb"})
output, exit_code = self.run_repl("exit()\n", env=env)
self.assertEqual(exit_code, 0)
self.assertIn("warning: can\'t use pyrepl", output)
self.assertIn("warning: can't use pyrepl", output)
self.assertNotIn("Exception", output)
self.assertNotIn("Traceback", output)

Expand Down
0