[Python-ideas] Runtime assertion with no overhead when not active

Steven D'Aprano steve at pearwood.info
Thu May 17 09:25:25 EDT 2018

On Thu, May 17, 2018 at 07:46:41AM +0000, Eloi Gaudry wrote:
> On Thu, 2018-05-17 at 03:09 +1000, Steven D'Aprano wrote:

> I proposed to have several ways to set it (see previous answers) : one
> would be extension based and the other would rely on having a builtin
> value that one would be able to change using a set function of the
> python core.

Sorry, I had forgetten the extension answer:

    Include/pydebug.h : int Py_RuntimeAssertFlag = 1;
    Your_extension/main.c : SetFlag(Py_RuntimeAssertFlag);

and I had missed your answer to have a builtin.

In any case, I don't think that having only a single flag for the entire 
Python application is sufficiently useful to bother with this. At the 
*absolute least* I would expect individual modules to be able to 
independently enable or disable their own "runtime assertions".

> What would then be solution for implementing the runtime_assert with
> the current python api ? A lambda ?

Earlier in this thread I mentioned that I had a few thoughts on that, 
and I was exploring those ideas. I asked for anyone interested to 
contact me off list.

Basically I am looking at how we could get delayed evaluation of 
expressions, which has a number of good use-cases. (So far I have four: 
this is only one of them.) And yes, wrapping the expression in a 
function (lambda) seems like the most promising approach.


More information about the Python-ideas mailing list