Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

safe_run_module: Silence SystemExit codes 0 and None. #2924

Merged
merged 1 commit into from
Feb 14, 2013

Conversation

bfroehle
Copy link
Contributor

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.

alter_sys=True)
)
except SystemExit as status:
if status.code not in (0, None):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just if status.code?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just aped the similar code from safe_execfile. Fixed.

@minrk
Copy link
Member

minrk commented Feb 14, 2013

makes sense to me, merging.

minrk added a commit that referenced this pull request Feb 14, 2013
safe_run_module: Silence SystemExit codes 0 and None.
@minrk minrk merged commit 6dc4287 into ipython:master Feb 14, 2013
@bfroehle bfroehle deleted the runmodule branch February 14, 2013 19:39
minrk added a commit that referenced this pull request Mar 5, 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.
minrk added a commit that referenced this pull request Mar 20, 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.
mattvonrocketstein pushed a commit to mattvonrocketstein/ipython that referenced this pull request Nov 3, 2014
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
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants