我有棘手的问题。这也应该很有趣。
有一种方法可以知道(源文件和行号(在收益率语句中停止生成器对象,等待恢复执行?还要考虑发电机通过"产量"语句委派给另一个发电机的可能性。
您始终可以抓住生成器对象框架的f_lineno
属性。
每个发电机都会引用其在genobj.gi_frame
中的执行框架。您可以从那里窥视并找到线号:
genobj.gi_frame.f_lineno
类似地,如果发电机从另一个发电机产生,它具有包含其他生成器对象的属性genobj.gi_yieldfrom
。如果gi_yieldfrom
不是None
(这意味着它确实会从另一个发生器中产生(,请在其gi_frame
中窥视并以类似的方式获取其行号。