New submission from Antony Lee:
`Path().with_name` can fail with a lot of different exceptions:
>>> Path("foo").with_name(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/pathlib.py", line 800, in with_name
raise ValueError("Invalid name %r" % (name))
ValueError: Invalid name 0
>>> Path("foo").with_name(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/pathlib.py", line 797, in with_name
drv, root, parts = self._flavour.parse_parts((name,))
File "/usr/lib/python3.5/pathlib.py", line 62, in parse_parts
drv, root, rel = self.splitroot(part)
File "/usr/lib/python3.5/pathlib.py", line 268, in splitroot
if part and part[0] == sep:
TypeError: 'int' object is not subscriptable
>>> Path("foo").with_name({})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/pathlib.py", line 800, in with_name
raise ValueError("Invalid name %r" % (name))
ValueError: Invalid name {}
>>> Path("foo").with_name({0: 1})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/pathlib.py", line 797, in with_name
drv, root, parts = self._flavour.parse_parts((name,))
File "/usr/lib/python3.5/pathlib.py", line 69, in parse_parts
parsed.append(sys.intern(rel))
TypeError: must be str, not dict
>>> Path("foo").with_name({"a": "b"})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/pathlib.py", line 797, in with_name
drv, root, parts = self._flavour.parse_parts((name,))
File "/usr/lib/python3.5/pathlib.py", line 62, in parse_parts
drv, root, rel = self.splitroot(part)
File "/usr/lib/python3.5/pathlib.py", line 268, in splitroot
if part and part[0] == sep:
KeyError: 0
While most are fairly clear, the last one is particularly confusing IMO;
additionally, looking at the implementation of `_Flavour.parse_parts` there
seems to be room for even more confusion with a properly crafted dict.
Of course, with Python's dynamicity a lot of exceptions can be triggered at
weird places using carefully crafted objects, but I think pathlib should at
least raise a clear exception when passed an incorrect builtin type.
----------
components: Library (Lib)
messages: 266724
nosy: Antony.Lee
priority: normal
severity: normal
status: open
title: Confusing exception in Path().with_name
versions: Python 3.5, Python 3.6
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue27161>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com