Well, I can't deny they broke it, but sanity is pretty deniable. Python has always been a dynamic language, and one of the core mantras was "there should be one obvious way to do it" (in contrast to Perl). All the new type annotation stuff and the multiple ways to handle string formatting are steps in very weird directions. Maybe they should make a Python version 4 to clean some of that mess up.
xrange is now range?
>multiple ways to handle string formatting
This is a problem?
As for sanity: bytes/unicode integer division chained exceptions os.scandir performance
I'm keen for 4 when it comes. Clinging to the past is only going to make things harder.
Yes, if you think, "There should be one-- and preferably only one --obvious way to do it."
As far as I know, it was simply because few people used it correctly and Guido thought it would help to tuck it out of the way in a module. That doesn't feel like a massive chasm to me. Most of the 2/3 moves and renames were cosmetic.
The clean break of 3 and the sanity it brings to the language is undeniable.