Patch by Toby Dickenson: don't die when an error occurs during string
conversion in an exception, but instead display <unprintable %s
object> where %s is the type name.
diff --git a/Lib/traceback.py b/Lib/traceback.py
index d219340..b733598 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -166,9 +166,15 @@
 						s = s + ' '
 				list.append('%s^\n' % s)
 				value = msg
-		list.append('%s: %s\n' % (str(stype), str(value)))
+		list.append('%s: %s\n' % (str(stype), _some_str(value)))
 	return list
 
+def _some_str(value):
+	try:
+		return str(value)
+	except:
+		return '<unprintable %s object>' % type(value).__name__
+
 
 def print_exc(limit=None, file=None):
 	"""This is a shorthand for 'print_exception(sys.exc_type,