Issue36958
Created on 2019-05-18 19:38 by Random832, last changed 2019-05-20 07:18 by terry.reedy. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| run.py.patch | Random832, 2019-05-18 19:38 | |||
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 13435 | merged | terry.reedy, 2019-05-20 02:05 | |
| PR 13437 | merged | miss-islington, 2019-05-20 03:11 | |
| Messages (5) | |||
|---|---|---|---|
| msg342809 - (view) | Author: (Random832) | Date: 2019-05-18 19:38 | |
IDLE currently just returns to the interactive prompt when a script exits, even if SystemExit has arguments. This can be confusing to new users if they are using sys.exit to print a message. |
|||
| msg342823 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2019-05-18 23:09 | |
https://docs.python.org/3/library/exceptions.html#SystemExit says: skip traceback, convert default None to 0, print any other non-int and convert to 1, and pass unprinted int to C exit(). I agree that IDLE should also print non-ints. The IDLE doc should mention its non-exit behavior. [https://docs.python.org/3/library/sys.html#sys.exit adds more about int return codes and that exit() only exits the process in the main thread. Neither is relevant here.] I believe the relevant code is the following, from run.Executive.runcode: except SystemExit: # Scripts that raise SystemExit should just # return to the interactive prompt pass except: self.usr_exc_info = sys.exc_info() if quitting: exit() # even print a user code SystemExit exception, continue print_exception() jit = self.rpchandler.console.getvar("<<toggle-jit-stack-viewer>>") if jit: self.rpchandler.interp.open_remote_stack_viewer() The bare except clause, including the comment, is from 2003. The 'except SystemExit' clause was added 2013 June 11 in #18196, a follow-up of comments in #5492. The obsoleted comment should have been deleted. The behavior suppressed was always printing traceback + message. What should have been retained was printing non-int messages, but I don't think that either Roger or I were aware of that behavior. One could argue that SystemExit in user code should trigger an exit from the user execution process, which would trigger a Shell Restart. This would be closer to the standard behavior. But it does not hurt, and may be better, to keep the process and let the user trigger a restart when wanted. In the case that inspired #18196, the SystemExit came from site.py, not user code, and definitely should not cause a restart. I will try something like the following: except SystemExit as e: ob = e.args[0] if not isinstance(ob, (type(None), int)): print('SystemExit: ' + str(ob), file=sys.stderr) Since the message will be followed by a normal prompt rather than an exit, I want to 'enhance' the message with the prefix and error color. |
|||
| msg342886 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2019-05-20 02:52 | |
New changeset 6d965b39b7a486dd9e96a60b19ee92382d668299 by Terry Jan Reedy in branch 'master': bpo-36958: In IDLE, print exit message (GH-13435) https://github.com/python/cpython/commit/6d965b39b7a486dd9e96a60b19ee92382d668299 |
|||
| msg342889 - (view) | Author: miss-islington (miss-islington) | Date: 2019-05-20 07:17 | |
New changeset 2d94d4f1a5f54f73450d2982eab54a6301741a32 by Miss Islington (bot) in branch '3.7': bpo-36958: In IDLE, print exit message (GH-13435) https://github.com/python/cpython/commit/2d94d4f1a5f54f73450d2982eab54a6301741a32 |
|||
| msg342890 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2019-05-20 07:18 | |
Thanks for the report. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2019-05-20 07:18:14 | terry.reedy | set | status: open -> closed resolution: fixed messages: + msg342890 stage: patch review -> resolved |
| 2019-05-20 07:17:08 | miss-islington | set | nosy:
+ miss-islington messages: + msg342889 |
| 2019-05-20 03:11:58 | miss-islington | set | pull_requests: + pull_request13346 |
| 2019-05-20 02:52:25 | terry.reedy | set | messages: + msg342886 |
| 2019-05-20 02:05:41 | terry.reedy | set | stage: needs patch -> patch review pull_requests: + pull_request13345 |
| 2019-05-18 23:09:19 | terry.reedy | set | type: behavior stage: needs patch messages: + msg342823 versions: + Python 3.8 |
| 2019-05-18 19:38:04 | Random832 | create | |