This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author terry.reedy
Recipients Carl.Friedrich.Bolz, Julian, terry.reedy, vstinner
Date 2021-02-13.00:00:51
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1613174451.41.0.800420052436.issue43154@roundup.psfhosted.org>
In-reply-to
Content
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.
History
Date User Action Args
2021-02-13 00:00:51terry.reedysetrecipients: + terry.reedy, vstinner, Carl.Friedrich.Bolz, Julian
2021-02-13 00:00:51terry.reedysetmessageid: <1613174451.41.0.800420052436.issue43154@roundup.psfhosted.org>
2021-02-13 00:00:51terry.reedylinkissue43154 messages
2021-02-13 00:00:51terry.reedycreate