Re: [Python-Dev] Pathlib enhancements - acceptable inputs and outputs for __fspath__ and os.fspath()
Sorry, I've forgot to use "Reply All". On Tue, Apr 12, 2016 at 9:49 AM, INADA Naoki <songofacandy@gmail.com> wrote:
IHMO it's safer to get an encoding error rather than no error when you
concatenate two byte strings encoded to two different encodings (mojibake).
print(os.fspath(obj)) will more likely do what you expect if os.fspath() always return str. I mean that it will encode your filename to the encoding of the terminal which can be different than the filesystem encoding.
If fspath() can return bytes, you should write print(os.fsdecode(os.fspath(obj))).
Why not print(obj)? str() is normal high-level API, and __fspath__ and os.fspath() should be low level API. Normal users shouldn't use __fspath__ and os.fspath(). Only library developers should use it.
-- INADA Naoki <songofacandy@gmail.com>
-- INADA Naoki <songofacandy@gmail.com>
INADA Naoki writes:
Why not print(obj)?
print(obj) will give mojibake by default if sys.getfilenameencoding() != sys.getdefaultencoding().
str() is normal high-level API, and __fspath__ and os.fspath() should be low level API. Normal users shouldn't use __fspath__ and os.fspath(). Only library developers should use it.
This is the price we pay for the stubbornness of the bytes-are-text-too meme.
participants (2)
-
INADA Naoki
-
Stephen J. Turnbull