Terry J. Reedy <tjre...@udel.edu> added the comment:
unraiseable hook is not needed. The REPL does: >>> sys.excepthook = lambda: None >>> 1/0 Error in sys.excepthook: TypeError: <lambda>() takes 0 positional arguments but 3 were given Original exception was: Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero >>> (no crash) ---------------------------------------------------- code.Console in the REPL currently does: >>> import sys >>> sys.excepthook = 1 >>> arsdfsd Error in sys.excepthook: TypeError: 'int' object is not callable Original exception was: Traceback (most recent call last): File "F:\dev\3x\lib\code.py", line 90, in runcode exec(code, self.locals) File "<console>", line 1, in <module> NameError: name 'arsdfsd' is not defined During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "F:\dev\3x\lib\code.py", line 301, in interact console.interact(banner, exitmsg) File "F:\dev\3x\lib\code.py", line 232, in interact more = self.push(line) File "F:\dev\3x\lib\code.py", line 258, in push more = self.runsource(source, self.filename) File "F:\dev\3x\lib\code.py", line 74, in runsource self.runcode(code) File "F:\dev\3x\lib\code.py", line 94, in runcode self.showtraceback() File "F:\dev\3x\lib\code.py", line 148, in showtraceback sys.excepthook(ei[0], ei[1], last_tb) TypeError: 'int' object is not callable >>> (code console crashes, evidenced by 'sys' not recognized -------------------------------------------------------------- IDLE in its normal 2-process mode, since 3 weeks ago, does: >>> sys.excepthook = lambda: None >>> 1/0 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> 1/0 ZeroDivisionError: division by zero During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Programs\Python310\lib\idlelib\run.py", line 576, in runcode sys.excepthook(*self.user_exc_info) TypeError: <lambda>() takes 0 positional arguments but 3 were given >>> (no crash) In IDLE's 1-process mode, selected with -n command line option, the hook exception has several IDLE specific lines added, as with the code exception. A return or two is needed to get >>> back. ------------------------------------------------------------------------ In any case, both the immediate code exception and the defective hook exception are printed. The recent patch to IDLE, PR-24302, was to replace 'print_exception()' (ignoring excepthook) with if sys.excepthook is sys.__excepthook__: print_exception() else: try: sys.excepthook(*self.user_exc_info) except: print_exception() I suggest that the code line 148, call to sys.excepthook be wrapped similarly (adjusted to write the lines if sys.excepthook fails). IDLE's exception order is determine by the default context annotation. I don't know what the REPL does to change the output, but I prefer the default. I will prepare a PR. code tests are in test.test_code_module because test_code tests code objects. ---------- nosy: +terry.reedy stage: -> test needed type: -> behavior versions: +Python 3.10 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43154> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com