##// END OF EJS Templates
Swallow potential exceptions from showtraceback() (#13934)...
Swallow potential exceptions from showtraceback() (#13934) The nbgrader project is aware of a form of cheating where students disrupt `InteractiveShell.showtraceback` in hopes of hiding exceptions to avoid losing points. They have implemented a solution to prevent this cheating from working on the client side, and have some tests to demonstrate this technique: https://github.com/jupyter/nbgrader/blob/main/nbgrader/tests/apps/files/submitted-cheat-attempt.ipynb https://github.com/jupyter/nbgrader/blob/main/nbgrader/tests/apps/files/submitted-cheat-attempt-alternative.ipynb In essence, these attacks import the interactive shell and erase the traceback handler so that their failing tests won't report failures. ```python import IPython.core.interactiveshell IPython.core.interactiveshell.InteractiveShell.showtraceback = None ``` The problem is that this causes an exception inside the kernel, leading to a stalled execution. The kernel has stopped working, but the client continues to wait for messages. So far, nbgrader's solution to this is to require a timeout value so the client can eventually decide it is done. This prevents allowing a value of `None` for `Execute.timeout` because this would cause a test case to infinitely hang. This commit addresses the problem by making `InteractiveShell._run_cell` a little more protective around it's call to `showtraceback()`. There is already a try/except block around running the cell. This commit adds a finally clause so that the method will _always_ return an `ExecutionResult`, even if a new exception is thrown within the except clause. For the record, the exception thrown is: TypeError: 'NoneType' object is not callable Accepting this change will allow nbgrader to update `nbgrader.preprocessors.Execute` to support a type of `Integer(allow_none=True)` as the parent `NotebookClient` intended. Discussion about this is ongoing in jupyter/nbgrader#1690.

File last commit:

r13436:0be4498d
r28101:e548ee23 merge
Show More
ipython.1
60 lines | 2.0 KiB | application/x-troff | GroffLexer
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH IPYTHON 1 "July 15, 2011"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7) and groff_man(7)
.\" .SH section heading
.\" .SS secondary section heading
.\"
.\"
.\" To preview this page as plain text: nroff -man ipython.1
.\"
.SH NAME
ipython \- Tools for Interactive Computing in Python.
.SH SYNOPSIS
.B ipython
.RI [ options ] " files" ...
.B ipython subcommand
.RI [ options ] ...
.SH DESCRIPTION
An interactive Python shell with automatic history (input and output), dynamic
object introspection, easier configuration, command completion, access to the
system shell, integration with numerical and scientific computing tools,
web notebook, Qt console, and more.
For more information on how to use IPython, see 'ipython \-\-help',
or 'ipython \-\-help\-all' for all available command\(hyline options.
.SH "ENVIRONMENT VARIABLES"
.sp
.PP
\fIIPYTHONDIR\fR
.RS 4
This is the location where IPython stores all its configuration files. The default
is $HOME/.ipython if IPYTHONDIR is not defined.
You can see the computed value of IPYTHONDIR with `ipython locate`.
.SH FILES
IPython uses various configuration files stored in profiles within IPYTHONDIR.
To generate the default configuration files and start configuring IPython,
do 'ipython profile create', and edit '*_config.py' files located in
IPYTHONDIR/profile_default.
.SH AUTHORS
IPython is written by the IPython Development Team <https://github.com/ipython/ipython>.