Prompted by Tim's comment, when handle_range_longs() sees an
unexpected type, report the actual type rather than 'float'.  (It's
hard to even reach this code with a float. :-)
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index c8b784a..aeb2d53 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -1366,24 +1366,24 @@
 		Py_INCREF(istep);
 	}
 
-	/* XXX What reason do we have to believe that if an arg isn't an
-	 * XXX int, it must be a float?
-	 */
 	if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
-		PyErr_SetString(PyExc_ValueError,
-				"integer start argument expected, got float.");
+		PyErr_Format(PyExc_ValueError,
+			     "integer start argument expected, got %s.",
+			     ilow->ob_type->tp_name);
 		goto Fail;
 	}
 
 	if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
-		PyErr_SetString(PyExc_ValueError,
-				"integer end argument expected, got float.");
+		PyErr_Format(PyExc_ValueError,
+			     "integer end argument expected, got %s.",
+			     ihigh->ob_type->tp_name);
 		goto Fail;
 	}
 
 	if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
-		PyErr_SetString(PyExc_ValueError,
-			"integer step argument expected, got float.");
+		PyErr_Format(PyExc_ValueError,
+			     "integer step argument expected, got %s.",
+			     istep->ob_type->tp_name);
 		goto Fail;
 	}