diff --git a/pynecone/var.py b/pynecone/var.py index 3b1f41254..2827b91f9 100644 --- a/pynecone/var.py +++ b/pynecone/var.py @@ -57,6 +57,9 @@ class Var(ABC): Returns: The var. + + Raises: + TypeError: If the value is JSON-unserializable. """ # Check for none values. if value is None: @@ -73,7 +76,12 @@ class Var(ABC): value = json.loads(to_json(value))["data"] # type: ignore type_ = Figure - name = value if isinstance(value, str) else json.dumps(value) + try: + name = value if isinstance(value, str) else json.dumps(value) + except TypeError as e: + raise TypeError( + f"To create a Var must be Var or JSON-serializable. Got {value} of type {type(value)}." + ) from e return BaseVar(name=name, type_=type_, is_local=is_local, is_string=is_string) diff --git a/tests/test_var.py b/tests/test_var.py index 80bea3bde..a81b2b30a 100644 --- a/tests/test_var.py +++ b/tests/test_var.py @@ -138,6 +138,23 @@ def test_create(value, expected): assert prop.equals(expected) # type: ignore +def test_create_type_error(): + """Test the var create function when inputs type error.""" + + class ErrorType: + pass + + value = ErrorType() + + with pytest.raises(TypeError) as exception: + Var.create(value) + + assert ( + exception.value.args[0] + == f"To create a Var must be Var or JSON-serializable. Got {value} of type {type(value)}." + ) + + def v(value) -> Var: val = Var.create(value) assert val is not None