On Wed, Sep 11, 2019 at 12:47 AM Daniel Holth <dho...@gmail.com> wrote: > > On Sat, Jun 22, 2019 at 2:48 AM Serhiy Storchaka <storch...@gmail.com> wrote: >> >> 22.06.19 01:08, Daniel Holth пише: >> > Thanks. I think I might like an option to disable str(bytes) without >> > disabling str != bytes. Unless the second operation would also corrupt >> > output. >> > >> > Came across this kind of set in the hyper http library which uses a set >> > to accept certain headers with either str or bytes keys. >> >> Does that library support Python 2? If it is true than you have a >> problem, because u'abc' == b'abc' in Python 2 and u'abc' != b'abc' in >> Python 3. >> >> If it is Python 3 only, you can just ignore BytesWarning. It was added >> purely to help to catch subtle bugs in transition to Python 3. In >> future, after Python 2 be out of use, BytesWarning will become deprecated. > > > I stopped using Python 3 after learning about str(bytes) by finding it in my > corrupted database. Ever since then I've been anxious about changing to the > new language, since it makes it so easy to convert from bytes to unicode by > accident without specifying a valid encoding. So I would like to see a future > where str(bytes) is effectively removed. I started working on a pull request > that adds an API to toggle str(bytes) at runtime with a thread local (instead > of requiring a command line argument), so you could do with no_str_bytes(): > if you were worried about the feature, but got a bit stuck in the internals. >
Python has, for as long as I've known it, permitted you to call str() on literally any object - if there's no other string form, you get its repr. Breaking this would break all manner of debugging techniques. ChrisA _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/74W36BRRQZ7JDAPP5X37NZVXENLORZPF/