New submission from Terry J. Reedy <tjre...@udel.edu>: import tkinter as tk root = tk.Tk()
def bad(): print(a, 'bad') def good(): print('good') root.after(1000, bad) root.after(1500, good) root.mainloop() # Correctly gives this traceback and output: Exception in Tkinter callback Traceback (most recent call last): File "C:\Programs\Python37\lib\tkinter\__init__.py", line 1699, in __call__ return self.func(*args) File "C:\Programs\Python37\lib\tkinter\__init__.py", line 745, in callit func(*args) File "F:\Python\a\tem2.py", line 13, in bad def bad(): print(a, 'bad') NameError: name 'a' is not defined good >>> ==================================== Remove or comment-out the blocking 'root.mainloop()' call and run the result from an IDLE editor. The callbacks are still called because after user code is run, run.py calls tcl.update in a loop nominally 20 x per second. This allows developers to interact with a 'live' gui by entering statements in the shell at '>>>' prompts. The result is this. ------------- >>> Exception in Tkinter callback Traceback (most recent call last): File "C:\Programs\Python37\lib\idlelib\run.py", line 137, in main seq, request = rpc.request_queue.get(block=True, timeout=0.05) File "C:\Programs\Python37\lib\queue.py", line 169, in get raise Empty queue.Empty During handling of the above exception, another exception occurred: Traceback (most recent call last): <The NameError traceback and message, as before.> -------------- The relevant code in run.py was written before callback chaining. try: seq, request = rpc.request_queue.get(block=True, timeout=0.05) except queue.Empty: handle_tk_events() continue Experiments with normal exceptions in a shell suggest that wrapping handle_tk_events in try:except and re-raising any exception 'from None' should work. try: handle_tk_events() except BaseException as e: raise e from None However, it appears that callback errors resulting from handle_tk_events() are not being caught here. (print('message') and 1/0 before 'raise' have no visible effect.) I will investigate more later. ---------- assignee: terry.reedy components: IDLE messages: 307534 nosy: terry.reedy priority: normal severity: normal stage: needs patch status: open title: IDLE: run's tk update adds extra traceback on callback error type: behavior versions: Python 3.6, Python 3.7 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32207> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com