Only throw factorial-related exception on factorial raised exception

This commit is contained in:
Sarina Canelake
2013-05-01 10:53:22 -04:00
parent 95a224fcea
commit 2cb3af1e35

View File

@@ -1852,12 +1852,18 @@ class FormulaResponse(LoncapaResponse):
raise StudentInputError(
"Invalid input: " + uv.message + " not permitted in answer")
except ValueError as ve:
# This is thrown when fact() or factorial() is used in a formularesponse answer
# that tests on negative and/or non-integer inputs
log.debug(
'formularesponse: factorial function used in response that tests negative and/or non-integer inputs. given={0}'.format(given))
raise StudentInputError(
"factorial function not permitted in answer for this problem. Provided answer was: {0}".format(given))
if 'factorial' in ve.message:
# This is thrown when fact() or factorial() is used in a formularesponse answer
# that tests on negative and/or non-integer inputs
# ve.message will be: `factorial() only accepts integral values` or `factorial() not defined for negative values`
log.debug(
'formularesponse: factorial function used in response that tests negative and/or non-integer inputs. given={0}'.format(given))
raise StudentInputError(
"factorial function not permitted in answer for this problem. Provided answer was: {0}".format(given))
# If non-factorial related ValueError thrown, handle it the same as any other Exception
log.debug('formularesponse: error {0} in formula'.format(ve))
raise StudentInputError("Invalid input: Could not parse '%s' as a formula" %
cgi.escape(given))
except Exception as err:
# traceback.print_exc()
log.debug('formularesponse: error %s in formula' % err)