bpo-36958: In IDLE, print exit message (GH-13435)

Print any argument other than None or int passed to SystemExit
or sys.exit().
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index be855bc..3f19ce7 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,12 @@
 ======================================
 
 
+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.
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index 56f9ca5..bc287d6 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -659,6 +659,8 @@
 <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 @@
 <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 />
 
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index 6fa373f..b4a2b54 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -474,15 +474,16 @@
                 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: