<div dir="ltr">But inspect is in the stdlib. Surely changing inspect.py is less controversial than amending the semantics of frame objects.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Mar 6, 2014 at 10:10 AM, Xavier Morel <span dir="ltr"><<a href="mailto:python-dev@masklinn.net" target="_blank">python-dev@masklinn.net</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 2014-03-06, at 16:52 , Antoine Pitrou <<a href="mailto:solipsis@pitrou.net">solipsis@pitrou.net</a>> wrote:<br>


> Le 06/03/2014 16:03, Yury Selivanov a écrit :<br>
>><br>
>> On 2014-03-06, 8:42 AM, Antoine Pitrou wrote:<br>
>>> Le 05/03/2014 23:53, Nick Coghlan a écrit :<br>
>>>><br>
>>>> __traceback__ wouldn't change [...]<br>
>>><br>
>>> Uh, really? If you want to suppress all reference cycles, you *have*<br>
>>> to remove __traceback__.<br>
>>><br>
>>> The problem is to make computation of the traceback summary<br>
>>> lightweight enough that it doesn't degrade performance in the common<br>
>>> case where you don't have to print the traceback later.<br>
>><br>
>> So why can't we allow instantiation of types.TracebackType &<br>
>> types.FrameType?<br>
><br>
> IMO it is absolutely out of question to allow creation of arbitrary frames from Python code, because the structure and initialization of frames embody too many low-level implementation details.<br>
><br>
> We might allow the creation of traceback objects, but without any custom frame objects it is unclear how useful that would be.<br>
<br>
</div>Some bits of the standard library (and probably third-party libraries<br>
transitively relying on getinnerframes) really, really want traceback<br>
objects and can't be used with a stack or frames extracted via<br>
inspect.currentframe() or whatever. For instance cgitb.text calls<br>
inspect.getinnerframes which accesses param.tb_frame then calls<br>
getframeinfo(param). getframeinfo blows up if it does not get either an<br>
actual traceback object or an actual frame object.<br>
<br>
A frame object does not have a tb_frame attribute, and will thus fail<br>
in getinnerframes, a fake traceback object will fail in getframeinfo.<br>
<br>
Therefore it's not possible to call cgitb.text outside of an exception<br>
handling context (that is, not possible to use it as a<br>
traceback.print_stack providing extra information). If it were possible<br>
to create traceback objects, there would be no issue there at least.<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org">Python-Dev@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-dev" target="_blank">https://mail.python.org/mailman/listinfo/python-dev</a><br>
Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/guido%40python.org" target="_blank">https://mail.python.org/mailman/options/python-dev/guido%40python.org</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>--Guido van Rossum (<a href="http://python.org/~guido">python.org/~guido</a>)
</div>