2016-04-14 15:40 GMT+02:00 Nick Coghlan <ncogh...@gmail.com>: >> I consider that the final goal of the whole discussion is to support >> something like: >> >> path = os.path.join(pathlib_path, "str_path", direntry) > > That's not a *new* problem though, it already exists if you pass in a > mix of bytes and str: > (...) > There's also already a solution (regardless of whether you want bytes > or str as the result), which is to explicitly coerce all the arguments > to the same type: > >>>> os.path.join(*map(os.fsdecode, ("str", b"bytes"))) > (...)
I don't understand. What is the point of adding a new __fspath__ protocol to *implicitly* convert path objects to strings, if you still have to use an explicit conversion? I would really expect that a high-level API like pathlib would solve encodings issues for me. IMHO DirEntry entries created by os.scandir(bytes) must use os.fsdecode() in their __fspath__ method. os.path.join() is just one example of an operation on multiple paths. Look at os.path for other example ;-) > os.path.join(*map(os.fsdecode, ("str", b"bytes"))) This code is quite complex for a newbie, don't you think so? My example was os.path.join(pathlib_path, "str_path", direntry) where we can do something to make the API easier to use. I don't propose to do anything for os.path.join("str", b"bytes") which would continue to fail with TypeError, *as expected*. Victor _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com