Make sure that PyDict_GetItem[String]() *never* raises an exception.
If the argument is not a dictionary, simply return NULL.  If the
hash() on the key fails, clear the error.
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 06d2dc4..7fed379 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -317,7 +317,6 @@
 {
 	long hash;
 	if (!PyDict_Check(op)) {
-		PyErr_BadInternalCall();
 		return NULL;
 	}
 	if (((dictobject *)op)->ma_table == NULL)
@@ -328,8 +327,10 @@
 #endif
 	{
 		hash = PyObject_Hash(key);
-		if (hash == -1)
+		if (hash == -1) {
+			PyErr_Clear();
 			return NULL;
+		}
 	}
 	return lookdict((dictobject *)op, key, hash) -> me_value;
 }