Fix SF bug #1669182.  Handle string exceptions even if unraisable (ie in __del__).
diff --git a/Misc/NEWS b/Misc/NEWS
index 9a46c42..8b0e7e2 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- Bug #1669182: prevent crash when trying to print an unraisable error
+  from a string exception.
+
 - Bug #1653736: Properly discard third argument to slot_nb_inplace_power.
 
 - SF #151204:  enumerate() now raises an Overflow error at sys.maxint items.
diff --git a/Python/errors.c b/Python/errors.c
index f31f025..bc77c3c 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -590,7 +590,11 @@
 		PyFile_WriteString("Exception ", f);
 		if (t) {
 			PyObject* moduleName;
-			char* className = PyExceptionClass_Name(t);
+			char* className = NULL;
+			if (PyExceptionClass_Check(t))
+				className = PyExceptionClass_Name(t);
+			else if (PyString_Check(t))
+				className = PyString_AS_STRING(t);
 
 			if (className != NULL) {
 				char *dot = strrchr(className, '.');