diff --git a/Lib/pathlib.py b/Lib/pathlib.py --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -529,7 +529,10 @@ return len(self._parts) def __getitem__(self, idx): - if idx < 0 or idx >= len(self): + length = len(self) + if idx < 0: + idx += length + if idx < 0 or idx >= length: raise IndexError(idx) return self._pathcls._from_parsed_parts(self._drv, self._root, self._parts[:-idx - 1]) diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -407,8 +407,9 @@ self.assertEqual(par[1], P('a')) self.assertEqual(par[2], P('.')) self.assertEqual(list(par), [P('a/b'), P('a'), P('.')]) + self.assertEqual(par[-2], P('a')) with self.assertRaises(IndexError): - par[-1] + par[-len(par)-1] with self.assertRaises(IndexError): par[3] with self.assertRaises(TypeError):