Skip to content

Commit

Permalink
tomli.loads: Raise TypeError not AttributeError. Improve message (#229
Browse files Browse the repository at this point in the history
)
  • Loading branch information
hukkin authored Oct 2, 2024
1 parent facdab0 commit 4e245a4
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/tomli/_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,12 @@ def loads(__s: str, *, parse_float: ParseFloat = float) -> dict[str, Any]: # no

# 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 = ()
Expand Down
9 changes: 9 additions & 0 deletions tests/test_error.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)

Expand Down

0 comments on commit 4e245a4

Please sign in to comment.