Python survived the 2->3 transition because Python was already in a dominant position and heaps of programs had to work, for better or for worse.
For a language with a lesser adoption, such a transition would have been a death warrant.
However, for me there are two key points around it: 1) it's over and done with 2) it wasn't that big of a deal if you planned for it. 90% of the things I was working on just worked with minor changes. The rest was mostly a matter of a few critical dependencies that had to be refactored around.
It was a non-issue for relatively small scripts. But if you were dependent on non-converted libraries, or e.g. if you handled a lot of non-English strings, it could get iffy very fast – and blow up in your face months later, in a rarely used code path.
> don't think Python was already in a dominant position
IME, it was very much in a, if not dominant, at least powerful positions everywhere.
It was roaring in webdev, most of academia had switched from Perl to Python, ML/DS were starting to seriously take off outside of research, and it was winning the war against Ruby for the goto language for quick 'n dirty between-bash-and-C programs & scripts.
The worst thing that ever happened to Python was being adopted as a scripting language in Linux distributions, which meant you couldn't ever update the "python" binary. "python3" was the worst idea since Solomon proposed cutting a baby in half because it leads inevitably to "python3.5", "pip3.6", "python3.7-pypy", etc. It's one more reason you can't write scripts that "just work".
Fortunately Python is doing the right things to restore sanity (pip refusing to install anything outside of a venv) but it's been a long time.
Hardly. ANSI C was a huge breaking change from early K&R C.