safe_run_module: Silence SystemExit codes 0 and None. #2924

Merged
merged 1 commit into from Feb 14, 2013

Conversation

Projects
None yet
2 participants
Contributor

bfroehle commented Feb 12, 2013

In safe_execfile we ignore SystemExit exceptions with codes 0 and 1. We don't do this for safe_run_module which leads to the following mismatch of tracebacks between Python and IPython:

$ cat > exit0.py
import sys
sys.exit(0)

$ python -m exit0

$ ipython -m exit0
---------------------------------------------------------------------------
SystemExit                                Traceback (most recent call last)
/usr/lib/python2.7/runpy.pyc in run_module(mod_name, init_globals, run_name, alter_sys)
    174     if alter_sys:
    175         return _run_module_code(code, init_globals, run_name,
--> 176                                 fname, loader, pkg_name)
    177     else:
    178         # Leave the sys module alone

/usr/lib/python2.7/runpy.pyc in _run_module_code(code, init_globals, mod_name, mod_fname, mod_loader, pkg_name)
     80         mod_globals = temp_module.module.__dict__
     81         _run_code(code, mod_globals, init_globals,
---> 82                   mod_name, mod_fname, mod_loader, pkg_name)
     83     # Copy the globals of the temporary module, as they
     84     # may be cleared when the temporary module goes away

/usr/lib/python2.7/runpy.pyc in _run_code(code, run_globals, init_globals, mod_name, mod_fname, mod_loader, pkg_name)
     70                        __loader__ = mod_loader,
     71                        __package__ = pkg_name)
---> 72     exec code in run_globals
     73     return run_globals
     74 

/tmp/exit0.py in <module>()
      1 import sys
----> 2 sys.exit(0)

SystemExit: 0
WARNING: Unknown failure executing module: <exit0>

The attached pull request silences SystemExit exceptions with codes 0 and None.

IPython/core/interactiveshell.py
+ alter_sys=True)
+ )
+ except SystemExit as status:
+ if status.code not in (0, None):
@minrk

minrk Feb 14, 2013

Owner

why not just if status.code?

@bfroehle

bfroehle Feb 14, 2013

Contributor

I just aped the similar code from safe_execfile. Fixed.

Owner

minrk commented Feb 14, 2013

makes sense to me, merging.

minrk added a commit that referenced this pull request Feb 14, 2013

Merge pull request #2924 from bfroehle/runmodule
safe_run_module: Silence SystemExit codes 0 and None.

@minrk minrk merged commit 6dc4287 into ipython:master Feb 14, 2013

1 check passed

default The Travis build passed
Details

@bfroehle bfroehle deleted the bfroehle:runmodule branch Feb 14, 2013

minrk added a commit that referenced this pull request Mar 5, 2013

Backport PR #2924: safe_run_module: Silence SystemExit codes 0 and None.
In `safe_execfile` we ignore SystemExit exceptions with codes 0 and 1.  We don't do this for `safe_run_module` which leads to the following mismatch of tracebacks between Python and IPython:

```
$ cat > exit0.py
import sys
sys.exit(0)

$ python -m exit0

$ ipython -m exit0
---------------------------------------------------------------------------
SystemExit                                Traceback (most recent call last)
/usr/lib/python2.7/runpy.pyc in run_module(mod_name, init_globals, run_name, alter_sys)
    174     if alter_sys:
    175         return _run_module_code(code, init_globals, run_name,
--> 176                                 fname, loader, pkg_name)
    177     else:
    178         # Leave the sys module alone

/usr/lib/python2.7/runpy.pyc in _run_module_code(code, init_globals, mod_name, mod_fname, mod_loader, pkg_name)
     80         mod_globals = temp_module.module.__dict__
     81         _run_code(code, mod_globals, init_globals,
---> 82                   mod_name, mod_fname, mod_loader, pkg_name)
     83     # Copy the globals of the temporary module, as they
     84     # may be cleared when the temporary module goes away

/usr/lib/python2.7/runpy.pyc in _run_code(code, run_globals, init_globals, mod_name, mod_fname, mod_loader, pkg_name)
     70                        __loader__ = mod_loader,
     71                        __package__ = pkg_name)
---> 72     exec code in run_globals
     73     return run_globals
     74

/tmp/exit0.py in <module>()
      1 import sys
----> 2 sys.exit(0)

SystemExit: 0
WARNING: Unknown failure executing module: <exit0>
```

The attached pull request silences SystemExit exceptions with codes 0 and None.

minrk added a commit that referenced this pull request Mar 20, 2013

Backport PR #2924: safe_run_module: Silence SystemExit codes 0 and None.
In `safe_execfile` we ignore SystemExit exceptions with codes 0 and 1.  We don't do this for `safe_run_module` which leads to the following mismatch of tracebacks between Python and IPython:

```
$ cat > exit0.py
import sys
sys.exit(0)

$ python -m exit0

$ ipython -m exit0
---------------------------------------------------------------------------
SystemExit                                Traceback (most recent call last)
/usr/lib/python2.7/runpy.pyc in run_module(mod_name, init_globals, run_name, alter_sys)
    174     if alter_sys:
    175         return _run_module_code(code, init_globals, run_name,
--> 176                                 fname, loader, pkg_name)
    177     else:
    178         # Leave the sys module alone

/usr/lib/python2.7/runpy.pyc in _run_module_code(code, init_globals, mod_name, mod_fname, mod_loader, pkg_name)
     80         mod_globals = temp_module.module.__dict__
     81         _run_code(code, mod_globals, init_globals,
---> 82                   mod_name, mod_fname, mod_loader, pkg_name)
     83     # Copy the globals of the temporary module, as they
     84     # may be cleared when the temporary module goes away

/usr/lib/python2.7/runpy.pyc in _run_code(code, run_globals, init_globals, mod_name, mod_fname, mod_loader, pkg_name)
     70                        __loader__ = mod_loader,
     71                        __package__ = pkg_name)
---> 72     exec code in run_globals
     73     return run_globals
     74

/tmp/exit0.py in <module>()
      1 import sys
----> 2 sys.exit(0)

SystemExit: 0
WARNING: Unknown failure executing module: <exit0>
```

The attached pull request silences SystemExit exceptions with codes 0 and None.

mattvonrocketstein pushed a commit to mattvonrocketstein/ipython that referenced this pull request Nov 3, 2014

Merge pull request #2924 from bfroehle/runmodule
safe_run_module: Silence SystemExit codes 0 and None.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment