diff -r 8428d15cbeff Lib/test/test_sys_settrace.py --- a/Lib/test/test_sys_settrace.py Sat Jun 04 07:13:38 2016 +0000 +++ b/Lib/test/test_sys_settrace.py Sat Jun 04 17:34:25 2016 +0200 @@ -388,6 +388,15 @@ (257, 'line'), (257, 'return')]) + def test_17_none_f_trace(self): + # Issue 20041: fix TypeError when f_trace is set to None. + def func(): + sys._getframe().f_trace = None + lineno = 2 + self.run_and_compare(func, + [(0, 'call'), + (1, 'line')]) + class RaisingTraceFuncTestCase(unittest.TestCase): def setUp(self): diff -r 8428d15cbeff Objects/frameobject.c --- a/Objects/frameobject.c Sat Jun 04 07:13:38 2016 +0000 +++ b/Objects/frameobject.c Sat Jun 04 17:34:25 2016 +0200 @@ -344,6 +344,8 @@ /* We rely on f_lineno being accurate when f_trace is set. */ f->f_lineno = PyFrame_GetLineNumber(f); + if (v == Py_None) + v = NULL; Py_XINCREF(v); Py_XSETREF(f->f_trace, v);