printobject now returns an error code
diff --git a/Python/pythonmain.c b/Python/pythonmain.c
index b855520..9fa1a58 100644
--- a/Python/pythonmain.c
+++ b/Python/pythonmain.c
@@ -289,10 +289,12 @@
 	object *exception, *v;
 	err_get(&exception, &v);
 	fprintf(stderr, "Unhandled exception: ");
-	printobject(exception, stderr, PRINT_RAW);
+	if (printobject(exception, stderr, PRINT_RAW) != 0)
+		err_clear();
 	if (v != NULL && v != None) {
 		fprintf(stderr, ": ");
-		printobject(v, stderr, PRINT_RAW);
+		if (printobject(v, stderr, PRINT_RAW) != 0)
+			err_clear();
 	}
 	fprintf(stderr, "\n");
 	XDECREF(exception);
diff --git a/Python/traceback.c b/Python/traceback.c
index 0b6904f..e71f6fa 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -186,12 +186,14 @@
 	FILE *fp;
 {
 	while (tb != NULL) {
-		if (intrcheck()) {
-			fprintf(fp, "[interrupted]\n");
+		if (intrcheck())
+			break;
+		fprintf(fp, "  File \"");
+		if (printobject(tb->tb_frame->f_code->co_filename,
+				fp, PRINT_RAW) != 0) {
+			err_clear();
 			break;
 		}
-		fprintf(fp, "  File \"");
-		printobject(tb->tb_frame->f_code->co_filename, fp, PRINT_RAW);
 		fprintf(fp, "\", line %d\n", tb->tb_lineno);
 		tb_displayline(fp,
 		     getstringvalue(tb->tb_frame->f_code->co_filename),