https://github.com/python/cpython/commit/9ce90206b7a4649600218cf0bd4826db79c9a312
commit: 9ce90206b7a4649600218cf0bd4826db79c9a312
branch: main
author: Taneli Hukkinen <[email protected]>
committer: hauntsaninja <[email protected]>
date: 2024-10-01T19:58:08-07:00
summary:
gh-124835: `tomllib.loads`: Raise TypeError not AttributeError. Improve message
(#124587)
files:
A Misc/NEWS.d/next/Library/2024-10-01-12-43-42.gh-issue-124835.SVyp3K.rst
M Lib/test/test_tomllib/test_error.py
M Lib/tomllib/_parser.py
diff --git a/Lib/test/test_tomllib/test_error.py
b/Lib/test/test_tomllib/test_error.py
index 72446267f04759..d2ef59a29ca350 100644
--- a/Lib/test/test_tomllib/test_error.py
+++ b/Lib/test/test_tomllib/test_error.py
@@ -39,6 +39,15 @@ def test_invalid_char_quotes(self):
tomllib.loads("v = '\n'")
self.assertTrue(" '\\n' " in str(exc_info.exception))
+ def test_type_error(self):
+ with self.assertRaises(TypeError) as exc_info:
+ tomllib.loads(b"v = 1") # type: ignore[arg-type]
+ self.assertEqual(str(exc_info.exception), "Expected str object, not
'bytes'")
+
+ with self.assertRaises(TypeError) as exc_info:
+ tomllib.loads(False) # type: ignore[arg-type]
+ self.assertEqual(str(exc_info.exception), "Expected str object, not
'bool'")
+
def test_module_name(self):
self.assertEqual(tomllib.TOMLDecodeError().__module__,
tomllib.__name__)
diff --git a/Lib/tomllib/_parser.py b/Lib/tomllib/_parser.py
index 45ca7a89630f0e..5671326646ca5a 100644
--- a/Lib/tomllib/_parser.py
+++ b/Lib/tomllib/_parser.py
@@ -71,7 +71,12 @@ def loads(s: str, /, *, parse_float: ParseFloat = float) ->
dict[str, Any]: # n
# The spec allows converting "\r\n" to "\n", even in string
# literals. Let's do so to simplify parsing.
- src = s.replace("\r\n", "\n")
+ try:
+ src = s.replace("\r\n", "\n")
+ except (AttributeError, TypeError):
+ raise TypeError(
+ f"Expected str object, not '{type(s).__qualname__}'"
+ ) from None
pos = 0
out = Output(NestedDict(), Flags())
header: Key = ()
diff --git
a/Misc/NEWS.d/next/Library/2024-10-01-12-43-42.gh-issue-124835.SVyp3K.rst
b/Misc/NEWS.d/next/Library/2024-10-01-12-43-42.gh-issue-124835.SVyp3K.rst
new file mode 100644
index 00000000000000..09e5a046f83e49
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-10-01-12-43-42.gh-issue-124835.SVyp3K.rst
@@ -0,0 +1,3 @@
+Make :func:`tomllib.loads` raise :exc:`TypeError` not :exc:`AttributeError`
+on bad input types that do not have the ``replace`` attribute. Improve error
+message when :class:`bytes` is received.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]