On int to the negative integral power, let float handle it instead of

raising an error.  This was one of the two issues that the VPython
folks were particularly problematic for their students.  (The other
one was integer division...)  This implements (my) SF patch #440487.
This commit is contained in:
Guido van Rossum 2001-07-12 11:19:45 +00:00
parent e9880c81b9
commit b82fedc7d8
1 changed files with 5 additions and 7 deletions

View File

@ -510,13 +510,11 @@ int_pow(PyIntObject *v, PyIntObject *w, PyIntObject *z)
CONVERT_TO_LONG(v, iv);
CONVERT_TO_LONG(w, iw);
if (iw < 0) {
if (iv)
PyErr_SetString(PyExc_ValueError,
"cannot raise integer to a negative power");
else
PyErr_SetString(PyExc_ZeroDivisionError,
"cannot raise 0 to a negative power");
return NULL;
/* Return a float. This works because we know that
this calls float_pow() which converts its
arguments to double. */
return PyFloat_Type.tp_as_number->nb_power(
(PyObject *)v, (PyObject *)w, (PyObject *)z);
}
if ((PyObject *)z != Py_None) {
CONVERT_TO_LONG(z, iz);