It's always been in the back of my mind that directly iterable strings are very often more trouble than they are worth. But I also agree that changing it would probably be extremely disruptive (and also might be more trouble than it's worth).
I've only been at it for about 3 years, but because of iterable strings I always seem to regret not using a function like this in many contexts:
def iter_nostr(iterable):
if isinstance(iterable, str):
raise TypeError(f"iterable cannot be a str")
yield from iter(iterable)
The nature of my coding work is a lot of parsing of different kinds of text files and so I've had to write a lot of functions that are meant to take in an iterable of strings. So the biggest context that comes to mind is to guard against future me mistakenly sending a string into functions that are intended to work with iterables of strings. I always seem to find a way to do this, with all kinds of head scratching results depending on the situation. I learned early on that if I don't include a guard like this, I'm going to pay for it later.
---
Ricky.
"I've never met a Kentucky man who wasn't either thinking about going home or actually going home." - Happy Chandler