我有棘手的问题。这也应该很有趣。
有一种方法可以知道在yield语句中停止生成器对象的位置(源文件和行号),等待恢复执行?还要考虑发电机通过'产生的方式委托给另一台发电机的可能性。言。
答案 0 :(得分:0)
您始终可以获取生成器对象框架的f_lineno
属性。
每个生成器在genobj.gi_frame
中保存对其执行帧的引用。您可以从那里查看并找到行号:
genobj.gi_frame.f_lineno
类似地,如果生成器从另一个生成器生成,则它具有包含另一个生成器对象的属性genobj.gi_yieldfrom
。如果gi_yieldfrom
不是None
(意味着它确实来自另一个生成器),请查看它gi_frame
并以类似的方式获取它的行号。< / p>