Python发电机对象:它们在哪里停止



我有棘手的问题。这也应该很有趣。

有一种方法可以知道(源文件和行号(在收益率语句中停止生成器对象,等待恢复执行?还要考虑发电机通过"产量"语句委派给另一个发电机的可能性。

您始终可以抓住生成器对象框架的f_lineno属性。

每个发电机都会引用其在genobj.gi_frame中的执行框架。您可以从那里窥视并找到线号:

genobj.gi_frame.f_lineno

类似地,如果发电机从另一个发电机产生,它具有包含其他生成器对象的属性genobj.gi_yieldfrom。如果gi_yieldfrom不是None(这意味着它确实会从另一个发生器中产生(,请在其gi_frame中窥视并以类似的方式获取其行号。