summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/idlelib/run.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index ad23793..98255c7 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -53,7 +53,7 @@ def main():
while 1:
try:
if exit_requested:
- os._exit(0)
+ sys.exit(0)
try:
seq, request = rpc.request_queue.get(0)
except Queue.Empty:
@@ -64,9 +64,15 @@ def main():
rpc.response_queue.put((seq, ret))
except KeyboardInterrupt:
continue
+ except SystemExit:
+ raise
except:
- print_exception()
- rpc.response_queue.put((seq, None))
+ try:
+ print_exception()
+ rpc.response_queue.put((seq, None))
+ except:
+ traceback.print_exc(file=sys.__stderr__)
+ sys.exit(1.1)
continue
def manage_socket(address):
@@ -207,13 +213,15 @@ class Executive:
try:
exec code in self.locals
except:
+ if exit_requested:
+ sys.exit(0)
try:
- if exit_requested:
- os._exit(0)
+ # even print a user code SystemExit exception, continue
print_exception()
except:
- sys.stderr = sys.__stderr__
- raise
+ # link not working?
+ traceback.print_exc(file=sys.__stderr__)
+ sys.exit(1.2)
else:
flush_stdout()