diff --git a/Lib/test/test_slice.py b/Lib/test/test_slice.py
index 4d89aa6a397f1f972663f1504973be4c76bab146..97b308460172fdb3da84f522f910a18c148ba89f 100644
--- a/Lib/test/test_slice.py
+++ b/Lib/test/test_slice.py
@@ -26,6 +26,9 @@ class SliceTest(unittest.TestCase):
         s3 = slice(1, 2, 4)
         self.assertEqual(s1, s2)
         self.assertNotEqual(s1, s3)
+        self.assertNotEqual(s1, None)
+        self.assertNotEqual(s1, (1, 2, 3))
+        self.assertNotEqual(s1, "")
 
         class Exc(Exception):
             pass
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 498172d5c4ac64fbf304061e40d02dcc468ae3b2..eb66c79b572136b1ef02e69776794715a5b33840 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -286,6 +286,11 @@ slice_richcompare(PyObject *v, PyObject *w, int op)
 	PyObject *t2;
 	PyObject *res;
 
+	if (!PySlice_Check(v) || !PySlice_Check(w)) {
+		Py_INCREF(Py_NotImplemented);
+		return Py_NotImplemented;
+	}
+
 	if (v == w) {
 		/* XXX Do we really need this shortcut?
 		   There's a unit test for it, but is that fair? */