It's ok for __hex__ or __oct__ to return unicode.
Don't insist that float('1'*10000) raises an exception.
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index aa0d0df..064b92a 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -1230,7 +1230,7 @@
 		return NULL;
 	}
 	res = (*nb->nb_hex)(v);
-	if (res && !PyString_Check(res)) {
+	if (res && !PyString_Check(res) && !PyUnicode_Check(res)) {
 		PyErr_Format(PyExc_TypeError,
 			     "__hex__ returned non-string (type %.200s)",
 			     res->ob_type->tp_name);
@@ -1430,7 +1430,7 @@
 		return NULL;
 	}
 	res = (*nb->nb_oct)(v);
-	if (res && !PyString_Check(res)) {
+	if (res && !PyString_Check(res) && !PyUnicode_Check(res)) {
 		PyErr_Format(PyExc_TypeError,
 			     "__oct__ returned non-string (type %.200s)",
 			     res->ob_type->tp_name);