Paul Ganssle <b...@m.ganssle.io> added the comment:

This is a great bug report, but for anyone else who gets a bit lost in the 
details, here's the core of the issue:

>>> p = Path("/1/2")
>>> q = Path("1/2")

>>> p.parents[-1]  # This is correct
PosixPath('/')
>>> q.parents[-1]
PosixPath('.')

>>> p.parents[-2]  # Should be PosixPath('/1')
PosixPath('/')
>>> q.parents[-2]
PosixPath('1')

>>> p.parents[-3]  # Should be PosixPath('/1/2')
PosixPath('/1')
>>> q.parents[-3]
PosixPath('1/2')

I think a refactoring where '/' doesn't appear in ._parts would be a good idea 
if we can get past Chesterton's Fence and determine that this was indeed not a 
deliberate design decision (or at least one whose concerns no longer apply), 
but at least in the short term, I agree that transforming negative indexes into 
positive indices is the right, expedient thing to do.

We'll definitely want to make sure that we're careful about bad indices (and 
add relevant tests), though, since it would be easy to get weird behavior where 
too-large negative indexes start "wrapping around" (e.g. p.parents[-4] with 
len(p._parents) == 3 → p.parents[-1]).

----------
type:  -> behavior

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45414>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to