Python 3 has very little benefit for ordinary Python programmers
Sometimes an incompatible transition is strongly justified. In some cases the old code and the old ways were actively dangerous to people because they were too easy to misuse (or were actually basically impossible to use safely); in other cases the baggage of the old was making it essentially impossible to add important new features that people actively wanted.
The Python 3 transition is not one of these. It was almost entirely about removing warts in the language, and here is the thing: ordinary programmers don't really care about language warts. Every language has some warts and in practice those warts rarely get in the way of doing work in the language; people work around them if necessary and often don't even notice them. Removing these warts from Python was (as far as I can tell) not required to make other progress in the language or the standard library. They were just things about the language that irritated the core Python developers.
(Hence, among other things, the comparison of Python 3 to XHTML.)
The big exception to this is also the most prominent and consequential
change in Python 3, that of making strings into Unicode by default. But
as Python 2's '
from __future__ import unicde_literals' demonstrates,
this did not have to be an incompatible change; it could have been put
in place in stages.
(In fact anything that is now covered in '
from __future__ import
...' could have been implemented in stages, just as many past Python
transitions have been managed.)
Note that this is not the same thing as saying that Python 3 has not brought new and worthwhile things to Python programmers. It certainly has. But as far as I can tell the reason they are only in Python 3 is a choice on the part of the Python developers, not a requirement.
(This idea is not unique to me by any means and I've touched on it in passing before, but today I want to state it explicitly.)