PyObject_Dir():
  - use PyModule_Check() instead of PyObject_TypeCheck(), now we can.
  - don't assert that the __dict__ gotten out of a module is always
    a dictionary; check its type, and raise an exception if it's not.
diff --git a/Objects/object.c b/Objects/object.c
index 365d131..704ffc1 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1424,11 +1424,15 @@
 	}
 
 	/* Elif this is some form of module, we only want its dict. */
-	else if (PyObject_TypeCheck(arg, &PyModule_Type)) {
+	else if (PyModule_Check(arg)) {
 		masterdict = PyObject_GetAttrString(arg, "__dict__");
 		if (masterdict == NULL)
 			goto error;
-		assert(PyDict_Check(masterdict));
+		if (!PyDict_Check(masterdict)) {
+			PyErr_SetString(PyExc_TypeError,
+					"module.__dict__ is not a dictionary");
+			goto error;
+		}
 	}
 
 	/* Elif some form of type or class, grab its dict and its bases.