Merged the int/long unification branch, by very crude means (sorry Thomas!).
I banged on the code (beyond what's in that branch) to make fewer tests fail;
the only tests that fail now are:
  test_descr -- can't pickle ints?!
  test_pickletools -- ???
  test_socket -- See python.org/sf/1619659
  test_sqlite -- ???
I'll deal with those later.
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index bde3454..fbff31b 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -7585,6 +7585,8 @@
 		    goto onError;
 		}
 		width = PyInt_AsLong(v);
+		if (width == -1 && PyErr_Occurred())
+			goto onError;
 		if (width < 0) {
 		    flags |= F_LJUST;
 		    width = -width;
@@ -7620,6 +7622,8 @@
 			goto onError;
 		    }
 		    prec = PyInt_AsLong(v);
+		    if (prec == -1 && PyErr_Occurred())
+			goto onError;
 		    if (prec < 0)
 			prec = 0;
 		    if (--fmtcnt >= 0)