diff --git a/test/test_value_array.py b/test/test_value_array.py index 2920e5c..3757925 100644 --- a/test/test_value_array.py +++ b/test/test_value_array.py @@ -254,3 +254,12 @@ def test_pick_roundtrip() -> None: x = value * unit s = pickle.dumps(x) assert all(x == pickle.loads(s)) + + +class _InvalidUnit: + pass + + +def test_invalid_unit_raises_error() -> None: + with pytest.raises(ValueError): + _ = tu.ValueArray([1, 2], _InvalidUnit()) diff --git a/tunits/core/cython/with_unit_value_array.pyx b/tunits/core/cython/with_unit_value_array.pyx index a9dd342..4e37ef3 100644 --- a/tunits/core/cython/with_unit_value_array.pyx +++ b/tunits/core/cython/with_unit_value_array.pyx @@ -46,7 +46,10 @@ class ValueArray(WithUnit): the items. """ if unit is not None: - unit = _try_interpret_as_with_unit(unit) + parsed_unit = _try_interpret_as_with_unit(unit) + if parsed_unit is None: + raise ValueError("Bad WithUnit scaling value: " + repr(unit)) + unit = parsed_unit # If the items have units, we're supposed to extract a shared unit. data = np.asarray(data)