dtgreene: The eval() example I gave is a situation where the default behavior is bad in most cases, and in particular is bad when you aren't aware of it. In Python 3 you can call eval() on user input if you really want to; it just isn't the default Python2 makes that dangerous practice the default, and requires typing a bit extra just to avoid it.
djoxyk: same question: if you don't know what you are doing why don't you learn first? people don't learn coding by guessing correct commands, there's learning and practice examples.
[...]
dtgreene: Also, what if the input contains characters that would be treated as special by the Python interpreter when passed to eval(), like apostrophes? Similar situations can easily happen in perl with the system() call (and in C, Python, and other languages, though it's easiest to do in perl I believe), or when communicating wth a SQL database (remember bobby tables?).
djoxyk: then you will have to use your common sense. if you ask user to enter their name or age or zip code it won't contain anything except expected symbols, it's your task to make sure you sanitize it properly. never trust user input - this gold rule is the first basic rule of coding. why you're making it an issue now?
similar situation can happen in any language if your command of that language is lacking. it's not the valid reason to remove such languages from repos. If you can't utilize given language to write secured code then use different language better suited for this task. every language has its uses even if it's of no interest for you.
My point is that wanting the language for learning purposes, which seems to be what you suggested earlier, is not a good reason to keep Python 2 around. If you are just learning to program, or are learning Python for the first time, you should be learning Python 3.
Also, when it comes to safety and security issues, there's the issue of how easy or difficult it is to use the language in a safe and secure way. Python 2's input() is hard to use safely; you have to write extra code to do so. By contrast, Python 3's input() is easy to use safely; it's safe by default, and only by adding extra code do you make it unsafe. Also, Python 2's version violates the principle of least surprise. (You wouldn't expect a call to input() to result in your home directory being deleted, but it is possible given the right input.)
Now, there *is* a valid reason for keeping Python 2 in the repository (though perhaps not in the default install), and that's to support legacy code, but that's really the only reason at this point. All new code should be written in Python 3 (unless it's part of a Python 2 project and upgrading the codebase to Python 3 isn't feasible), and anyone learning the language should start with Python 3.
(As a sidenote, Python 2's input() at least can be used in a safe manner with some work (though it's easier to just use raw_input(), which is the same as Python 3's input(); C's gets(), on the other hand, *can't* be used safely (unless you're able to strictly control the input, which is almost never the case), and therefore has no business being in the standard library in the first place. How it got into the standard library in the first place I have no idea, as it was a colossal design mistake from the start.)