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

bpo-12403: Mention sys.displayhook in code module docs and the compile builtin docs #26217

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
26 changes: 26 additions & 0 deletions Doc/library/code.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,32 @@ build applications which provide an interactive interpreter prompt.
raises :exc:`OverflowError` or :exc:`ValueError` if the command contains an
invalid literal.

Overriding Console Output
-------------------------

The output for :class:`InteractiveConsole` and :class:`InteractiveInterpreter`
is written using one of :data:`sys.stderr`, :func:`sys.displayhook`
or :func:`sys.excepthook`. Which output mechanism is used depends on the
reason for producing output:

* The return value from successfully interpreted Python statements are printed
by calling :func:`sys.displayhook`. This is a side effect of
:func:`compile_command` passing ``'single'`` for *symbol*.
* If the default :func:`sys.excepthook` has not been replaced, syntax errors
and exception tracebacks are printed by calling the
:meth:`write <io.TextIOBase.write>` method on :data:`sys.stderr`.
* If :func:`sys.excepthook` has been replaced with a user defined function
:func:`sys.excepthook` is called to handle printing of exception tracebacks
and syntax errors.

Additionally, :class:`InteractiveConsole` will print banner information to
:data:`sys.stderr` if *banner* was passed to the constructor.

iritkatriel marked this conversation as resolved.
Show resolved Hide resolved
To customize the console output a user should replace :func:`sys.displayhook`
and :func:`sys.excepthook` with custom implementations. Alternatively, users
can replace the :meth:`InteractiveConsole.write` method on a subclass
instead of replacing :func:`sys.excepthook` to control the printing of errors.

iritkatriel marked this conversation as resolved.
Show resolved Hide resolved

.. _interpreter-objects:

Expand Down
5 changes: 3 additions & 2 deletions Doc/library/functions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -288,8 +288,9 @@ are always available. They are listed here in alphabetical order.
The *mode* argument specifies what kind of code must be compiled; it can be
``'exec'`` if *source* consists of a sequence of statements, ``'eval'`` if it
consists of a single expression, or ``'single'`` if it consists of a single
interactive statement (in the latter case, expression statements that
evaluate to something other than ``None`` will be printed).
interactive statement. In the latter case, expression statements that
normanlorrain marked this conversation as resolved.
Show resolved Hide resolved
evaluate to something other than ``None`` will be printed using
:func:`sys.displayhook`.

The optional arguments *flags* and *dont_inherit* control which
:ref:`compiler options <ast-compiler-flags>` should be activated
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update to documentation.
normanlorrain marked this conversation as resolved.
Show resolved Hide resolved