bpo-32207: Improve tk event exception tracebacks in IDLE. (GH-4703) (#4705)

When tk event handling is driven by IDLE's run loop, a confusing
and distracting queue.EMPTY traceback context is no longer added
to tk event exception tracebacks.  The traceback is now the same
as when event handling is driven by user code.  Patch based on
a suggestion by Serhiy Storchaka.
(cherry picked from commit 1e2fcac497)
This commit is contained in:
Miss Islington (bot) 2017-12-04 14:02:32 -08:00 committed by Terry Jan Reedy
parent 6e687948b0
commit 9da33c8212
2 changed files with 15 additions and 5 deletions

View File

@ -134,13 +134,17 @@ def main(del_exitfunc=False):
# exiting but got an extra KBI? Try again!
continue
try:
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
request = rpc.request_queue.get(block=True, timeout=0.05)
except queue.Empty:
request = None
# Issue 32207: calling handle_tk_events here adds spurious
# queue.Empty traceback to event handling exceptions.
if request:
seq, (method, args, kwargs) = request
ret = method(*args, **kwargs)
rpc.response_queue.put((seq, ret))
else:
handle_tk_events()
continue
method, args, kwargs = request
ret = method(*args, **kwargs)
rpc.response_queue.put((seq, ret))
except KeyboardInterrupt:
if quitting:
exit_now = True

View File

@ -0,0 +1,6 @@
Improve tk event exception tracebacks in IDLE.
When tk event handling is driven by IDLE's run loop, a confusing
and distracting queue.EMPTY traceback context is no longer added
to tk event exception tracebacks. The traceback is now the same
as when event handling is driven by user code. Patch based on a
suggestion by Serhiy Storchaka.