[Python-ideas] Better stdlib support for Path objects

Guido van Rossum guido at python.org
Mon Oct 6 20:04:16 CEST 2014


On Mon, Oct 6, 2014 at 10:47 AM, Barry Warsaw <barry at python.org> wrote:

> Over in issue 22570, I lament the fact that while pathlib is awesome, its
> wider support in the stdlib is pretty sparse.  I've tried to convert parts
> of
> a medium sized Python 3 application from os.path to pathlib and found this
> lack of support rather demotivating.  Yes, it's fairly easy to wrap Path
> objects in str() to pass them to stdlib methods that expect only strings,
> but
> it's a lot of work in user code and I find that the resulting str()s are
> distracting.  It's a disincentive.
>
> Antoine provided a link to a previous discussion[*] but that didn't go very
> far.
>
> One simple solution would be to sprinkle str() calls in various stdlib
> methods, but I'm not sure if that would fail miserably in the face of bytes
> paths (if the original stdlib API even accepts bytes paths).  The
> suggestion
> in the issue is to add a "path protocol" and the referenced article
> suggests
> .strpath and .bytespath.  OTOH, isn't str() and bytes() enough?
>
> I don't have any other brilliant ideas, but I opened the issue and am
> posting
> here to see if we can jump start another discussion for Python 3.5.  I'd
> *like* to use more Paths, but not at the expense of my own code's
> readability.
> Yes, I'd sacrifice a bit of readability in the stdlib, especially if that
> would cover more use cases.
>
> Cheers,
> -Barry
>
> [*] https://mail.python.org/pipermail/python-ideas/2014-May/027869.html
>

I'd turn it around.

You can construct a Path from an argument that can be either a string or
another Path. Example:

>>> from pathlib import Path
>>> p = Path('/etc/passwd')
>>> q = Path(p)
>>> p == q
True
>>>

So you could start refactoring stdlib code to use Path internally without
forcing the callers to use Path, but still *allow* the callers to pass a
Path. Though I'm not sure how this would work for return values without
breaking backwards compatibility -- you'd have to keep returning strings
and the callers would have to use the same mechanism to go back to using
Paths.

-- 
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20141006/67de88ca/attachment.html>


More information about the Python-ideas mailing list