diff --git a/news/use-valuerror.rst b/news/use-valuerror.rst new file mode 100644 index 00000000..b3517b21 --- /dev/null +++ b/news/use-valuerror.rst @@ -0,0 +1,23 @@ +**Added:** + +* + +**Changed:** + +* Use ``ValueError`` instead of ``TypeError`` for failed ``Operator.operation``. + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +* diff --git a/src/diffpy/srfit/equation/literals/operators.py b/src/diffpy/srfit/equation/literals/operators.py index 98264bec..c319bf8e 100644 --- a/src/diffpy/srfit/equation/literals/operators.py +++ b/src/diffpy/srfit/equation/literals/operators.py @@ -123,7 +123,13 @@ def getValue(self): """Get or evaluate the value of the operator.""" if self._value is None: vals = [arg.value for arg in self.args] - self._value = self.operation(*vals) + try: + self._value = self.operation(*vals) + except Exception as e: + raise ValueError( + "Error evaluating operator '%s' with arguments %s : %s" + % (self, vals, e) + ) return self._value value = property(lambda self: self.getValue()) diff --git a/tests/test_literals.py b/tests/test_literals.py index 8155d64a..1e5e9e25 100644 --- a/tests/test_literals.py +++ b/tests/test_literals.py @@ -115,7 +115,7 @@ def testAddLiteral(self): """Test adding a literal to an operator node.""" op = self.op - self.assertRaises(TypeError, op.getValue) + self.assertRaises(ValueError, op.getValue) op._value = 1 self.assertEqual(op.getValue(), 1) @@ -124,7 +124,7 @@ def testAddLiteral(self): b = literals.Argument(name="b", value=0) op.addLiteral(a) - self.assertRaises(TypeError, op.getValue) + self.assertRaises(ValueError, op.getValue) op.addLiteral(b) self.assertAlmostEqual(0, op.value) diff --git a/tests/test_visitors.py b/tests/test_visitors.py index 546edaaa..dd9ab029 100644 --- a/tests/test_visitors.py +++ b/tests/test_visitors.py @@ -207,7 +207,7 @@ def testSimpleFunction(self): assert plus2.hasObserver(mult._flush) # plus2 has no arguments yet. Verify this. - with pytest.raises(TypeError): + with pytest.raises(ValueError): mult.getValue() # Add the arguments to plus2. plus2.addLiteral(v4)