[Python-ideas] Changing the meaning of bool.__invert__

Steven D'Aprano steve at pearwood.info
Sat Apr 9 11:25:14 EDT 2016

On Sat, Apr 09, 2016 at 08:28:10AM -0600, Ian Kelly wrote:

> It seems unusual to deprecate something without also providing a means
> of using the new thing in the same release. "Don't use this feature
> because we're going to change what it does in the future. Oh, you want
> to use the new version? Psych! We haven't actually done anything yet.
> Use not instead." It creates a weird void in Python 3.6 where the
> operator still exists but absolutely nobody has a legitimate reason to
> be using it.

Not really. This is quite similar to what happened in Python 2.3 during 
int/long unification. The behaviour of certain integer operations 
changed, including the meaning of some literals, and warnings were 

I don't have 2.3 available to demonstrate but I can show you the change 
in behaviour:

[steve at ando ~]$ python1.5 -c "print 0xffffffff"
[steve at ando ~]$ python2.4 -c "print 0xffffffff"

By memory, 0xffffffff in python2.3 would print a warning that the result 
will change in the next release, and return -1.



> What happens if somebody is using ~ for its current semantics, skips
> the 3.6 release in their upgrade path, and doesn't read the release
> notes carefully enough? They'll never see the warning and will just
> experience a silent and difficult-to-diagnose breakage.

Then they'll be in the same position as everybody if there's no 
depreciation at all.


More information about the Python-ideas mailing list