If sys.trace is None, don't trace.  For exceptions, only use
the local trace function.
diff --git a/Python/ceval.c b/Python/ceval.c
index cc2f034..fc21706 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -159,6 +159,10 @@
 
 	trace = sysget("trace");
 	if (trace != NULL) {
+	  if (trace == None) {
+		trace = NULL;
+	  }
+	  else {
 		/* sys.trace, if defined, is a function that will
 		   be called  on *every* entry to a code block.
 		   Its return value, if not None, is a function that
@@ -184,6 +188,7 @@
 			DECREF(trace);
 			trace = NULL;
 		}
+	  }
 	}
 	
 	next_instr = GETUSTRINGVALUE(f->f_code->co_code);
@@ -1057,11 +1062,7 @@
 				f->f_lasti -= 2;
 			tb_here(f);
 
-			if (trace)
-				v = trace;
-			else
-				v = sysget("trace");
-			if (v) {
+			if (trace) {
 				object *type, *value, *traceback, *arg;
 				err_get(&type, &value);
 				traceback = tb_fetch();
@@ -1073,7 +1074,7 @@
 					settupleitem(arg, 1, value);
 					settupleitem(arg, 2, traceback);
 				}
-				v = call_trace(v, f, "exception", arg);
+				v = call_trace(trace, f, "exception", arg);
 				if (v == NULL) {
 					/* Trace function raised error */
 					tb_here(f);