Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

gh-102778: IDLE - make sys.last_exc available in Shell after traceback#103314

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
terryjreedy merged 5 commits intopython:mainfromiritkatriel:exc_info-idlelib
Apr 19, 2023

Conversation

iritkatriel
Copy link
Member

@iritkatrieliritkatriel commentedApr 6, 2023
edited by bedevere-bot
Loading

@iritkatriel
Copy link
MemberAuthor

Is this documented anywhere in idlelib docs?

@terryjreedy
Copy link
Member

Yes and no. The 'yes' part is that "Running user code" says that IDLE generally tries to runuser code so that it gives the same output (objects) one would get if one runs the same code in python itself, in either batch or interactive mode. Some known differences are then listed in this section and the next, "Displaying output in Shell".

For this issue, user-code sys.last_xyz expressions should have the same result as with python.exe in the same circumstances. In user code,sys.last_exc must continue raising an attribute error in 3.11 like it does in REPL. I considered whether to use last_exc 'internally' in 3.11, but decided to leave 3.11 alone. (And you never suggested touching it.)

In 3.12, last_exc must be set after the the first uncaught-by-user-code 'interactive' exception. Since IDLE intends to simulate running code from an editor withpython -i, all user exceptions caught by IDLE are treated as interactive. Hence the two new lines in run.py that unconditionally set last_exc along with the deprecated but still supported attributes. For users, these 2 lines are the only new code relevant to 'Support sys.last_exc in IDLE'. They should have been in the last alpha and should be added, I think, now.

The immediate manual test is that IDLE imitate the REPL as below instead of raising AttributeError as it does now.

>>>import sys; 1/0Traceback ...>>> sys.last_excZeroDivisionError('division by zero')

Fixing test_run to check this may or may not be simple.

This change should get a line in What's New 3.12. Check the IDLE entry in What's New 3.11. This could be done later.

The no part is that the rest of the patch, including that to pyshell.py, only concerns stackviewer. This is internal code of no direct concern to users. It need not be done now, or even in 3.12, as it should continue to work. When revised, the support for 2.x string exceptions and the use of the old attributes (which were for support of string exceptions) should be removed. The only effect on users would be that the way to disable stackviewer will change fromdel sys.last_traceback (undocumented except the the error message ;-) todel sys.last_exc. So revert the current stackview changes and draft a separate PR or wait for me to do so in maybe a week.

@terryjreedy
Copy link
Member

terryjreedy commentedApr 7, 2023
edited
Loading

Reviewing further, I think that the secondsys.last_exc = value may not be needed for the user code issue. The test would be to make only the first addition and manually test. The second may be redundant with the first or it may only be used for internal communication. The exception ultimately comes from sys.exc_info (or from a test) and IDLE does not have to use sys as a cache. It should only set sys.last_xyz as needed for non-IDLE code.

In any case, I would like to be able to pass the exception object to stackviewer and its tree item so that the module has no need of sys. Such a change could be attached to#102832 and backported to 3.11.#68978 has a list of possible improvements for stackviewer and if I get familiar with the code again I might want to do some and backport to 3.11.

Closing was an accident. Time to sleep.

@terryjreedy
Copy link
Member

I verified that the setting of sys.last_exc in print_exception should be sufficient.

iritkatriel reacted with thumbs up emoji

@iritkatrieliritkatriel changed the titlegh-102778: add last_exc in idlelib, to replace sys.last_type/value/tracebackgh-102778: add last_exc in idlelib, to eventually replace sys.last_type/value/tracebackApr 7, 2023
@terryjreedyterryjreedy changed the titlegh-102778: add last_exc in idlelib, to eventually replace sys.last_type/value/tracebackgh-102778: IDLE - make sys.last_exc available in Shell after tracebackApr 19, 2023
@terryjreedyterryjreedy merged commitd1e4917 intopython:mainApr 19, 2023
carljm added a commit to carljm/cpython that referenced this pull requestApr 20, 2023
* main: (24 commits)pythongh-98040: Move the Single-Phase Init Tests Out of test_imp (pythongh-102561)pythongh-83861: Fix datetime.astimezone() method (pythonGH-101545)pythongh-102856: Clean some of the PEP 701 tokenizer implementation (python#103634)pythongh-102856: Skip test_mismatched_parens in WASI builds (python#103633)pythongh-102856: Initial implementation of PEP 701 (python#102855)pythongh-103583: Add ref. dependency between multibytecodec modules (python#103589)pythongh-83004: Harden msvcrt further (python#103420)pythonGH-88342: clarify that `asyncio.as_completed` accepts generators yielding tasks (python#103626)pythongh-102778: IDLE - make sys.last_exc available in Shell after traceback (python#103314)pythongh-103582: Remove last references to `argparse.REMAINDER` from docs (python#103586)pythongh-103583: Always pass multibyte codec structs as const (python#103588)pythongh-103617: Fix compiler warning in _iomodule.c (python#103618)pythongh-103596: [Enum] do not shadow mixed-in methods/attributes (pythonGH-103600)pythonGH-100530: Change the error message for non-class class patterns (pythonGH-103576)pythongh-95299: Remove lingering setuptools reference in installer scripts (pythonGH-103613)  [Doc] Fix a typo in optparse.rst (python#103504)pythongh-101100: Fix broken reference `__format__` in `string.rst` (python#103531)pythongh-95299: Stop installing setuptools as a part of ensurepip and venv (python#101039)pythonGH-103484: Docs: add linkcheck allowed redirects entries for most cases (python#103569)pythongh-67230: update whatsnew note for csv changes (python#103598)  ...
@iritkatrieliritkatriel deleted the exc_info-idlelib branchJuly 25, 2023 18:05
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@terryjreedyterryjreedyAwaiting requested review from terryjreedyterryjreedy is a code owner

Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

Add sys.last_exc, deprecate sys.last_type, sys.last_value and sys.last_traceback
3 participants
@iritkatriel@terryjreedy@bedevere-bot

[8]ページ先頭

©2009-2025 Movatter.jp