Better error messages when a sequence is indexed with a non-integer.
Previously, this said "unsubscriptable object"; in 1.5.1, the reverse
problem existed, where None[''] would complain about a non-integer
index.  This fix does the right thing in all cases (for get, set and
del item).
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 7458b94..123455a 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -232,8 +232,11 @@
 	if (m && m->mp_subscript)
 		return m->mp_subscript(o, key);
 
-	if (PyInt_Check(key))
-		return PySequence_GetItem(o, PyInt_AsLong(key));
+	if (o->ob_type->tp_as_sequence) {
+		if (PyInt_Check(key))
+			return PySequence_GetItem(o, PyInt_AsLong(key));
+		return type_error("sequence index must be integer");
+	}
 
 	return type_error("unsubscriptable object");
 }
@@ -254,8 +257,12 @@
 	if (m && m->mp_ass_subscript)
 		return m->mp_ass_subscript(o, key, value);
 
-	if (PyInt_Check(key))
-		return PySequence_SetItem(o, PyInt_AsLong(key), value);
+	if (o->ob_type->tp_as_sequence) {
+		if (PyInt_Check(key))
+			return PySequence_SetItem(o, PyInt_AsLong(key), value);
+		type_error("sequence index must be integer");
+		return -1;
+	}
 
 	type_error("object does not support item assignment");
 	return -1;
@@ -276,8 +283,12 @@
 	if (m && m->mp_ass_subscript)
 		return m->mp_ass_subscript(o, key, (PyObject*)NULL);
 
-	if (PyInt_Check(key))
-		return PySequence_DelItem(o, PyInt_AsLong(key));
+	if (o->ob_type->tp_as_sequence) {
+		if (PyInt_Check(key))
+			return PySequence_DelItem(o, PyInt_AsLong(key));
+		type_error("sequence index must be integer");
+		return -1;
+	}
 
 	type_error("object does not support item deletion");
 	return -1;