[Python-Dev] pathlib - current status of discussions (original) (raw)
Victor Stinner victor.stinner at gmail.com
Thu Apr 14 08:16:03 EDT 2016
- Previous message (by thread): [Python-Dev] pathlib - current status of discussions
- Next message (by thread): [Python-Dev] pathlib - current status of discussions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2016-04-13 19:10 GMT+02:00 Brett Cannon <brett at python.org>:
https://gist.github.com/brettcannon/b3719f54715787d54a206bc011869aa1 has the four potential approaches implemented (although it doesn't follow the "separate functions" approach some are proposing and instead goes with the allowbytes approach I originally proposed).
IMHO the best argument against the flavor 4 (fspath: str or bytes allowed) is the os.path.join() function.
I consider that the final goal of the whole discussion is to support something like:
path = os.path.join(pathlib_path, "str_path", direntry)
Even if direntry uses a bytes filename. I expect genericpath.join() to be patched to use os.fspath(). If os.fspath() returns bytes, path.join() will fail with an annoying TypeError.
I expect that DirEntry.fspath uses os.fsdecode() to return str, just to make my life easier.
I recall that I used to say that Python 2 doesn't support Unicode filenames because os.path.join() raises a UnicodeDecodeError when you try to join a Unicode filename with a byte filename which contains non-ASCII bytes. The problem occurs indirectly in code using hardcoded paths, Unicode or bytes paths. Saying that "Python 2 doesn't support Unicode filenames" is wrong, but since Unicode is an hard problem, I tried to simplify my explanation :-)
You can apply the same rationale for the flavors 2 and 3 (os.fspath(path, allow_bytes=True)). Indirectly, you will get similar TypeError on os.path.join().
Victor
- Previous message (by thread): [Python-Dev] pathlib - current status of discussions
- Next message (by thread): [Python-Dev] pathlib - current status of discussions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]