This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: define built-in exceptions in Python code
Type: enhancement Stage: needs patch
Components: Interpreter Core Versions: Python 3.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: benjamin.peterson, brett.cannon, christian.heimes, cvrebert, ezio.melotti
Priority: low Keywords:

Created on 2013-06-08 23:54 by brett.cannon, last changed 2022-04-11 14:57 by admin.

Messages (3)
msg190837 - (view) Author: Brett Cannon (brett.cannon) * (Python committer) Date: 2013-06-08 23:54
This quite possibly won't work because of performance, but I have been wondering how feasible it would be to define as many core exception types as possible in pure Python code and then freeze the module for loading. It would have the benefit of making maintenance easier (e.g. all of the PEP 3151 exceptions would have been simpler to add). It also would make it easier on other VMs by minimizing the number of exceptions that have to be written in their implementation language.

Implementation-wise, it's probably easiest to start with leaf exceptions in the inheritance hierarchy and then slowly port more and more. Any exceptions ported to pure Python would have their PyExc_* variable set to their parent so that the variable is initialized to some exception before any Python code is touched. The real trick will come down to dealing with situations where some specific C API has been exposed (e.g. UnicodeError).

Even if this experiment turns out to be feasible and reasonable in terms of simplifying C code, the other question is performance. If this costs more than a couple percent of overall performance (and quite possibly not even at that expense) this would not be worth it.
msg190848 - (view) Author: Benjamin Peterson (benjamin.peterson) * (Python committer) Date: 2013-06-09 07:12
I suppose you'd better hope that there are no errors loading said frozen module. :)
msg190880 - (view) Author: Brett Cannon (brett.cannon) * (Python committer) Date: 2013-06-10 00:46
Yeah, that's the tricky bit. =) That's why I was thinking of starting with the leaf exceptions and then just slowly working down the hierarchy until I hit exceptions that just had to exist in C code (e.g. BaseException, Exception, and maybe SyntaxError). The rest could be made fake with Exception to start and then replace after the module was loaded.
History
Date User Action Args
2022-04-11 14:57:46adminsetgithub: 62370
2016-09-25 13:21:37christian.heimessetnosy: + christian.heimes

versions: + Python 3.7, - Python 3.4
2013-06-15 21:07:23ezio.melottisetnosy: + ezio.melotti
2013-06-14 16:30:25cvrebertsetnosy: + cvrebert
2013-06-10 00:46:56brett.cannonsetmessages: + msg190880
2013-06-09 07:12:45benjamin.petersonsetnosy: + benjamin.peterson
messages: + msg190848
2013-06-08 23:54:59brett.cannoncreate