Ответ 1
Это забавно: вы забыли позвонить z
, когда вы передали его на f
:
iterators = izip(*f(z()))
Итак, f
попытался выполнить итерацию по объекту функции:
for _ in z: pass # z is a function
Это вызвало TypeError:
TypeError: 'function' object is not iterable
Внутренние Python поймали его и сделали ререйз с запутанным сообщением об ошибке.
# ceval.c
static PyObject *
ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
{
...
t = PySequence_Tuple(stararg);
if (t == NULL) {
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
PyErr_Format(PyExc_TypeError,
"%.200s%.200s argument after * "
"must be a sequence, not %200s",
PyEval_GetFuncName(func),
PyEval_GetFuncDesc(func),
stararg->ob_type->tp_name);
...