bpo-36958: In IDLE, print exit message (GH-13435)
authorTerry Jan Reedy <tjreedy@udel.edu>
Mon, 20 May 2019 02:52:22 +0000 (22:52 -0400)
committerGitHub <noreply@github.com>
Mon, 20 May 2019 02:52:22 +0000 (22:52 -0400)
Print any argument other than None or int passed to SystemExit
or sys.exit().

Doc/library/idle.rst
Lib/idlelib/NEWS.txt
Lib/idlelib/help.html
Lib/idlelib/run.py
Misc/NEWS.d/next/IDLE/2019-05-19-22-02-22.bpo-36958.DZUC6G.rst [new file with mode: 0644]

index f511d64b550be66fd537c4b7c61da0583cd0b966..c51cf19e97bd05b24acff4adbf51e5d1f842e301 100644 (file)
@@ -700,6 +700,9 @@ If ``sys`` is reset by user code, such as with ``importlib.reload(sys)``,
 IDLE's changes are lost and input from the keyboard and output to the screen
 will not work correctly.
 
+When user code raises SystemExit either directly or by calling sys.exit, IDLE
+returns to a Shell prompt instead of exiting.
+
 User output in Shell
 ^^^^^^^^^^^^^^^^^^^^
 
index be855bc46718528d5fd402e415ece1b5bdfcc9cd..3f19ce737396308dd0b50d0537036e2dcef3143d 100644 (file)
@@ -3,6 +3,12 @@ Released on 2019-10-20?
 ======================================
 
 
+bpo-36958: Print any argument other than None or int passed to
+SystemExit or sys.exit().
+
+bpo-36807: When saving a file, call file.flush() and os.fsync()
+so bits are flushed to e.g. a USB drive.
+
 bpo-36429: Fix starting IDLE with pyshell.
 Add idlelib.pyshell alias at top; remove pyshell alias at bottom.
 Remove obsolete __name__=='__main__' command.
index 56f9ca503daac251428d02aa51bc7be8e111ad6c..bc287d637ab738332e5f6445c60f6d07e9824fda 100644 (file)
@@ -659,6 +659,8 @@ will then be attached to that window for input and output.</p>
 <p>If <code class="docutils literal notranslate"><span class="pre">sys</span></code> is reset by user code, such as with <code class="docutils literal notranslate"><span class="pre">importlib.reload(sys)</span></code>,
 IDLE’s changes are lost and input from the keyboard and output to the screen
 will not work correctly.</p>
+<p>When user code raises SystemExit either directly or by calling sys.exit, IDLE
+returns to a Shell prompt instead of exiting.</p>
 </div>
 <div class="section" id="user-output-in-shell">
 <h3>User output in Shell<a class="headerlink" href="#user-output-in-shell" title="Permalink to this headline">¶</a></h3>
@@ -941,7 +943,7 @@ also used for testing.</p>
 <br />
     <br />
 
-    Last updated on May 16, 2019.
+    Last updated on May 19, 2019.
     <a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
     <br />
 
index 6fa373f2584c271315fcc4156dea4d87d03c1734..b4a2b54a33c850b49734b78ce6efec038077fc12 100644 (file)
@@ -474,15 +474,16 @@ class Executive(object):
                 exec(code, self.locals)
             finally:
                 interruptable = False
-        except SystemExit:
-            # Scripts that raise SystemExit should just
-            # return to the interactive prompt
-            pass
+        except SystemExit as e:
+            if e.args:  # SystemExit called with an argument.
+                ob = e.args[0]
+                if not isinstance(ob, (type(None), int)):
+                    print('SystemExit: ' + str(ob), file=sys.stderr)
+            # Return to the interactive prompt.
         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:
diff --git a/Misc/NEWS.d/next/IDLE/2019-05-19-22-02-22.bpo-36958.DZUC6G.rst b/Misc/NEWS.d/next/IDLE/2019-05-19-22-02-22.bpo-36958.DZUC6G.rst
new file mode 100644 (file)
index 0000000..c5a675d
--- /dev/null
@@ -0,0 +1,2 @@
+Print any argument other than None or int passed to SystemExit or
+sys.exit().