Apply patch from Ray Allen for issue 9296
diff --git a/Lib/json/tests/test_fail.py b/Lib/json/tests/test_fail.py
index 94e01e6..9768edf 100644
--- a/Lib/json/tests/test_fail.py
+++ b/Lib/json/tests/test_fail.py
@@ -74,3 +74,12 @@
                 pass
             else:
                 self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc))
+
+    def test_non_string_keys_dict(self):
+        data = {'a' : 1, (1, 2) : 2}
+
+        #This is for c encoder
+        self.assertRaises(TypeError, json.dumps, data)
+
+        #This is for python encoder
+        self.assertRaises(TypeError, json.dumps, data, indent=True)
diff --git a/Modules/_json.c b/Modules/_json.c
index c965176..9a3708d 100644
--- a/Modules/_json.c
+++ b/Modules/_json.c
@@ -1454,7 +1454,7 @@
         }
         else {
             /* TODO: include repr of key */
-            PyErr_SetString(PyExc_ValueError, "keys must be a string");
+            PyErr_SetString(PyExc_TypeError, "keys must be a string");
             goto bail;
         }