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

Reply via email to