正如某些人指出的那样,并非每个人都总是得到您描述的行为。例如,您不会在REPL上获得此行为。要在REPL上重现此行为,您必须
delgen在末尾添加。这使我们知道警告即将到来。该警告来自生成器对象的清除功能,该功能已注意到生成器未完全退出。
具体发生的是,在解释器尝试清理生成器并释放其资源时,生成器引发了异常。解释器无法传播此异常,因此它将记录此状态并继续执行。具体来说,正在调用PyErr_WriteUnraisable。而这里是它是如何被调用(注释矿)。
void_PyGen_Finalize(PyObject *self){ ... if (gen is a coroutine) { // special error detecting logic for coroutines } else { res = gen_close(gen, NULL); // <- raises GeneratorExit } if (res == NULL) { if (PyErr_Occurred()) { PyErr_WriteUnraisable(self); } } else { Py_DECREF(res); } ...}


