bpo-35942: Improve the error message if __fspath__ returns invalid types in path_converter (GH-11831)

The error message emitted when returning invalid types from __fspath__ in interfaces that allow passing PathLike objects has been improved and now it does explain the origin of the error.
This commit is contained in:
Pablo Galindo 2019-02-18 10:46:34 +00:00 committed by GitHub
parent ac28147e78
commit 09fbcd6085
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 9 deletions

View file

@ -3344,7 +3344,7 @@ class PathTConverterTests(unittest.TestCase):
cleanup_fn(result)
with self.assertRaisesRegex(
TypeError, 'should be string, bytes'):
TypeError, 'to return str or bytes'):
fn(int_fspath, *extra_args)
if allow_fd:
@ -3357,6 +3357,23 @@ class PathTConverterTests(unittest.TestCase):
'os.PathLike'):
fn(fd, *extra_args)
def test_path_t_converter_and_custom_class(self):
with self.assertRaisesRegex(
TypeError,
'__fspath__\(\) to return str or bytes, not int'
):
os.stat(FakePath(2))
with self.assertRaisesRegex(
TypeError,
'__fspath__\(\) to return str or bytes, not float'
):
os.stat(FakePath(2.34))
with self.assertRaisesRegex(
TypeError,
'__fspath__\(\) to return str or bytes, not object'
):
os.stat(FakePath(object()))
@unittest.skipUnless(hasattr(os, 'get_blocking'),
'needs os.get_blocking() and os.set_blocking()')