On Tue, Jul 17, 2018 at 12:54 AM, Gene Heskett <ghesk...@shentel.net> wrote: > On Monday 16 July 2018 10:24:28 Marko Rauhamaa wrote: > >> Antoon Pardon <antoon.par...@vub.be>: >> > I really don't understand why the author of that article didn't just >> > copy his python2 program but used sys.stdin.buffer and >> > sys.sydout.buffer instead of plain sys.stdin and stdout. >> >> Yes, it would be nice if you could simply restrict yourself to bytes >> everywhere when your application needed it. Unfortunately, quite many >> facilities demand text, and you will need to ponder carefully at each >> such place how you deal with encoding/decoding exceptions. >> >> Plus the bytes syntax is really ugly. I wish Python3 had reserved >> '...' for byte strings and "..." for UTF-32 strings. > > From a lurker, that does sound usefull. The next PEP maybe?
Definitely not. Mainly, this is a massive break of backward compatibility; but even aside from that, I am NOT a fan of having multiple string types with sneakily different meanings. Let's look at a few other languages where the quote type changes the meaning: * C and its direct derivatives: "string", 'c' 'h' 'a' 'r'. Completely different (a character is an integer). * JavaScript: "string", 'string', `formatted string`. Annoyingly similar. Hard to do anything else though. * SQL: 'string', "identifier", `broken MySQL identifier`. Constantly tripping people up. * Bourne shell: 'literal string', "interpolated string". Periodically annoys people who "use quoted strings like this!" All of them cause confusion, frequently. I think the C example causes the least confusion, due to it being so completely different (you can't write 'Hello, world' because that's too long for a string, and C's static typing system is strong enough to catch most bugs of this nature fairly quickly); all the others cause frequent problems. In JavaScript's case, I kinda feel for the ECMAScript people in that they wanted to add the feature but didn't really have any good options (JS doesn't have string prefixes the way Python does), but it still causes confusion; a backtick string in JS can span multiple lines, but the others can't, so sometimes backticks are used even without interpolation, and it's confusing. With SQL's different quoting types, MySQL decided to go and violate the standard by making double quotes into strings, but that just introduced even MORE confusion, rather than solving anything. And shell scripting... well, if anyone truly understands all the quoting and interpolation rules in bash, I would be terrified of how many marbles that person has lost. Python 2 had backticks meaning something completely different from string literals. Starting with 3.0, backticks are explicitly excluded from syntax, and the only way a quote character changes the string is that three of them means you can span lines. Let's keep it simple. Prefixes are there for a reason. ChrisA -- https://mail.python.org/mailman/listinfo/python-list