[Python-ideas] PEP: Distributing a Subset of the Standard Library
Nick Coghlan
ncoghlan at gmail.com
Fri Dec 2 23:08:35 EST 2016
On 3 December 2016 at 02:56, Tomas Orsava <torsava at redhat.com> wrote:
> Is there some reason not to use sys.excepthook for both interactive and
> non-interactive use? From the docs:
>
> "When an exception is raised and uncaught, the interpreter calls
> sys.excepthook with three arguments, the exception class, exception
> instance, and a traceback object. In an interactive session this happens
> just before control is returned to the prompt; in a Python program this
> happens just before the program exits. The handling of such top-level
> exceptions can be customized by assigning another three-argument function to
> sys.excepthook."
No, that was just me forgetting that sys.excepthook was also called
for unhandled exceptions in non-interactive mode. It further
strengthens the argument for seeing how far we can get with just the
flexibility CPython already provides, though.
> Though I believe the default sys.excepthook function is currently written in
> C, so it wouldn't be very easy for distributors to customize it. Maybe it
> could be made to read module=error_message pairs from some external file,
> which would be easier to modify?
The default implementation is written in C, but distributors could
patch site.py to replace it with a custom one written in Python. For
example, publish a "fedora-hooks" module to PyPI (so non-system Python
installations or applications regularly run without the site module
can readily use the same hooks if they choose to do so), and then
patch site.py in the system Python to do:
import fedora_hooks
fedora_hooks.install_excepthook()
The nice thing about that approach is it wouldn't need a new switch to
turn it off - it would get turned off with all the other site-specific
customisations when -S or -I is used. It would also better open things
up to redistributor experimentation in existing releases (2.7, 3.5,
etc) before we commit to a specific approach in the reference
interpreter (such as adding an optional 'platform.hooks' submodule
that vendors may provide, and relevant stdlib APIs will then call
automatically to override the default upstream provided processing).
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-ideas
mailing list