On Wednesday, July 25, 2018 at 10:33:37 AM UTC+2, Brice Parent wrote:

I think the use case here is not really the simple 'is  None' + 'is not

Sure, that's why I also proposed to manually check a non-too-small samples of the None-testing occurences found by Guido .
You did it on your sample, and your findings findings are what I roughly expected.
I didn't do it. Well, not true, I sort of did it ;-), but I was lazy so I did not look enough to be representative, it was only a quick look at a very few instances:

I did not encounter deep hierarchy descent (I think the few we have use hasattr), but I found a couple where the proposed syntax would help but just a little: it's short and would use single ?? or ??=
By far, the most common case was using None as a marker for "we need a default sensible in the context", most of the time for a default argument. ?? and ??= indeed makes things slightly shorter and usually slightly clearer, but the improvement is very small as  things are short and clear already. That's also why I was interested in the default argument delegating: In quite a few cases, the None default was because the real default was in a subfunction, and a way to delegate would be much more useful there.

if the case is just to replace one None value by something else, it's
not really an improvement as we just save one short line, and once the
new syntax is accepted and we're used to it, both solution are quite
explicit with what they do, so I'd prefer the status quo over a second
way of doing the same thing.

Yep, ditto. That's why I am -1 on ?? and ??= : They are useful, but not enough imho

It gets interesting in json-like cases, when we traverse a deep tree in
which we might encounter None at multiple levels.

I hoped the PEP writers would submit such reallife examples, I think that's the motivation behind the PEP. But either I missed it, or they didn't show it yet.