[Python-ideas] PEP 428 - object-oriented filesystem paths

Ethan Furman ethan at stoneleaf.us
Fri Oct 5 22:06:57 CEST 2012


Antoine Pitrou wrote:
> On Fri, 5 Oct 2012 20:19:12 +0100
> Paul Moore <p.f.moore at gmail.com> wrote:
>> On 5 October 2012 19:25, Antoine Pitrou <solipsis at pitrou.net> wrote:
>>> A path can be joined with another using the ``__getitem__`` operator::
>>>
>>>     >>> p = PurePosixPath('foo')
>>>     >>> p['bar']
>>>     PurePosixPath('foo/bar')
>>>     >>> p[PurePosixPath('bar')]
>>>     PurePosixPath('foo/bar')
>> There is a risk that this is too "cute". However, it's probably better
>> than overloading the '/' operator, and you do need something short.
> 
> I think overloading '/' is ugly (dividing paths??).

But '/' is the normal path separator, so it's not dividing; and it 
certainly makes more sense than `%` with string interpolations.  ;)


> Someone else proposed overloading '+', which would be confusing since we
> need to be able to combine paths and regular strings, for ease of use.
> The point of using __getitem__ is that you get an error if you replace
> the Path object with a regular string by mistake:
> 
>>>> PurePath('foo')['bar']
> PurePosixPath('foo/bar')
>>>> 'foo'['bar']
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: string indices must be integers
> 
> If you were to use the '+' operator instead, 'foo' + 'bar' would work
> but give you the wrong result.

I would rather use the `/` and `+` and risk the occasional wrong result. 
(And yes, I have spent time tracking bugs because of that wrong result 
when using my own Path module -- and I'd still rather make that trade-off.)

~Ethan~



More information about the Python-ideas mailing list