With `bytes` it was obvious that byte length was not the same as $whatever length, and that was really the only semi-common bug (and was mostly limited to English speakers who are new to programming). All other bugs come from blindly trusting `unicode` whose bugs are far more subtle and numerous.
Python 3 introduced the bytes type that you like so much. It sounds like you would enjoy a Python 4 with only a bytes type and no string type, and presumably with a strong convention to only use UTF-8 or with required encoding arguments everywhere.
In both Python 2 and Python 3, you still have to learn how to handle grapheme clusters carefully.
The freedoms were about freedom for the user not a non user developer.
$ uv run --with tshu python -m asyncio
>>> from tshu import sh
>>> username = "aspizu; rm -rf /"
>>> await sh(t"echo {username}")
aspizu; rm -rf /Does this code print out the contents of the file named `--help`, or does it print the documentation for the `cat` command?
filename = "--help"
await sh(t"cat {filename}") $ uvx python@3.14
Python 3.14.0 (main, Oct 7 2025, 15:35:21) [Clang 20.1.4 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
That was beautifully easy! (Make sure you're on the latest version of uv first (v0.9.0))The Guardian in particular is funded by a trust fund, by donations, by advertising, and maybe by other sources of revenue as well.