From d2aea50af1b30f72c751a27ba9c410b46782fa17 Mon Sep 17 00:00:00 2001 From: Stijn de Gooijer Date: Mon, 4 Dec 2023 20:57:31 +0100 Subject: [PATCH] fix(python): Fix error message for uninstantiated `Enum` types (#12886) --- py-polars/polars/datatypes/convert.py | 2 +- py-polars/src/conversion.rs | 12 ++++++++---- py-polars/tests/unit/datatypes/test_enum.py | 7 +++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/py-polars/polars/datatypes/convert.py b/py-polars/polars/datatypes/convert.py index eee6b433426f..73bb6a15f33a 100644 --- a/py-polars/polars/datatypes/convert.py +++ b/py-polars/polars/datatypes/convert.py @@ -320,7 +320,7 @@ def REPR_TO_DTYPE(self) -> dict[str, PolarsDataType]: def _dtype_str_repr_safe(o: Any) -> PolarsDataType | None: try: return _dtype_str_repr(o.base_type()).split("[")[0] - except ValueError: + except TypeError: return None return { diff --git a/py-polars/src/conversion.rs b/py-polars/src/conversion.rs index b733c1a40a4d..2218ff4fb0e6 100644 --- a/py-polars/src/conversion.rs +++ b/py-polars/src/conversion.rs @@ -453,6 +453,11 @@ impl FromPyObject<'_> for Wrap { "Binary" => DataType::Binary, "Boolean" => DataType::Boolean, "Categorical" => DataType::Categorical(None), + "Enum" => { + return Err(PyTypeError::new_err( + "Enum types must be instantiated with a list of categories", + )) + }, "Date" => DataType::Date, "Datetime" => DataType::Datetime(TimeUnit::Microseconds, None), "Time" => DataType::Time, @@ -468,8 +473,8 @@ impl FromPyObject<'_> for Wrap { "Null" => DataType::Null, "Unknown" => DataType::Unknown, dt => { - return Err(PyValueError::new_err(format!( - "{dt} is not a recognised polars DataType.", + return Err(PyTypeError::new_err(format!( + "'{dt}' is not a Polars data type", ))) }, } @@ -539,8 +544,7 @@ impl FromPyObject<'_> for Wrap { }, dt => { return Err(PyTypeError::new_err(format!( - "A {dt} object is not a recognised polars DataType. \ - Hint: use the class without instantiating it.", + "'{dt}' is not a Polars data type", ))) }, }; diff --git a/py-polars/tests/unit/datatypes/test_enum.py b/py-polars/tests/unit/datatypes/test_enum.py index 114468c28963..aa704fc32483 100644 --- a/py-polars/tests/unit/datatypes/test_enum.py +++ b/py-polars/tests/unit/datatypes/test_enum.py @@ -126,3 +126,10 @@ def test_extend_to_an_enum() -> None: s.extend(s2) assert s.len() == 8 assert s.null_count() == 1 + + +def test_series_init_uninstantiated_enum() -> None: + with pytest.raises( + TypeError, match="Enum types must be instantiated with a list of categories" + ): + pl.Series(["a", "b", "a"], dtype=pl.Enum)