Of course consistency is valuable. I am asking how it is automatically more valuable than "better or worse", which isn't an idea that makes sense to me. Consistency isn't axiomatically valuable, it's valuable for reasons such as what you've explained which ultimately boil down to what's better or worse. Those reasons can be outweighed by other considerations. Consistency is not *infinitely* valuable.
Here's how I think the journey for a beginner discovering this stuff would go. First they run some code that iterates directly over a string. And doing so works, because I'm not advocating removing iterability at any point. But a warning with some message about iterating over a string shows up. It suggests using `.chars()`, which they do, and the warning goes away. That would probably be the end of it.
From the assumptions in this scenario, we're talking about a beginner - specifically one who might have trouble understanding the kinds of things we're discussing, and who has never iterated over a string before (which, if I am to be generous to your side, is supposedly a common activity). I don't think it's likely that they will have drawn the connection yet between indexing and iteration.
But let's assume they have, and they're curious why they got a warning. Or more likely, let's assume that they don't immediately figure out what to do from the warning message. The obvious next step is to search for the message online. This is a specific warning regarding iterating over strings, so the results will specifically be about this topic. Through Google's algorithm and Stack Overflow's votes, they will probably land on an explanation that is widely regarded as one of the best online, so probably better than what I'm about to offer. But here's what I would write:
"Iterating through a string has always meant iterating over its characters. But there aren't many situations where this is useful. In most cases iterating over a string directly is a sign that a mistake has been made, such as passing a string to a function instead of a list containing one string. This often leads to mysterious behaviour that can be hard to understand and fix. To help users find these mistakes more quickly, the warning was added in recent versions of Python, along with the chars() method to signal to both human readers and Python the intent to iterate over characters. This makes strings a gentle exception to the common convention that indexing and iteration have matching behaviour."
To be fair, I think many users will not initially understand the explanation. But they will move on with their lives. Eventually though, they will accidentally iterate over a string, and the warning will appear again, and this time it will probably be helpful to them. Then, whether or not they remember the explanation, or even if they didn't read it in the first place, they will probably start to understand why that warning exists.
And that's the 'worst case' scenario from the perspective of your comment. I think the most likely scenario is that they will see the warning in a helpful context before they try iterating over a string, so they will have some experience to help them understand before they get a chance to wonder about the inconsistency.
So in a nutshell:
1. I think that users being confused about this inconsistency is not going to harm them as much as you seem to be claiming.
2. I think that users will learn to understand the reasoning behind inconsistency from practical experience, more than any explanation.
By contrast, the examples you've given are definitely harmful and difficult to understand.
I've been personally baffled by the first example. But the real problem with them is deeper than inconsistency. The problem is that they are surprising, confusing, and difficult to debug. Which is exactly the kind of bug that the proposed warning is meant to defend against, and definitely not the kind of problem that will be caused by seeing said warning and contemplating inconsistencies in the data model.