If you believe this is a bug then please open an issue at bugs.python.org
so we don't lose track of it.

On Fri, Jun 21, 2019 at 11:09 AM Ed Peschko <horo...@gmail.com> wrote:

> Steven,
>
> Yes and I posted to python-dev for a reason - I'm almost positive that
> this is a bug - or at least an inconsistency - in how python handles
> stack frames WRT closures in some instances.  In fact, the reason I
> posted is because we hit this inconsistency in handling production
> code - we need to have a reliable stack trace for all the functions we
> call in logs so we can better track down issues when they occur and be
> able to tie those issues to underlying code.
>
> If I add a pdb.set_trace() to the location inside the closure, I get a
> different - in fact the correct - stack trace. Otherwise, like I said,
> the stack trace points back to the place where the closure was
> defined, not the actual place the closure was called.
>
> Unfortunately, it looks like this bug is not in a simple example that
> I can readily reproduce (I just tried). so if I see it again i'll try
> to simplify it to a point where it still manifests and post that.
>
> Ed
>
> On Fri, Jun 21, 2019 at 1:35 AM Steve Holden <st...@holdenweb.com> wrote:
> >
> > Hi Ed,
> >
> > Your note probably won't receive any other reply than this, because the
> python-dev list is specifically for discussions about the development _of_,
> rather than _with_, Python.
> >
> > A more appropriate forum is probably the Python list (
> python-l...@python.org), about which you can discover more details at
> Python-list Info Page.
> >
> > Kind regards,
> > Steve Holden
> >
> >
> > On Thu, Jun 20, 2019 at 3:40 AM Ed Peschko <horo...@gmail.com> wrote:
> >>
> >> all,
> >>
> >> I'm writing a function meant to print out the context of a given
> >> function call when executed - for example:
> >>
> >> 1. def main():
> >> 2.
> >> 3. _st = stack_trace_closure("/path/to/log")
> >> 4. _st()
> >> 5. _st()
> >>
> >> would print out
> >>
> >>     /path/to/file.py:4
> >>     /path/to/file.py:5
> >>
> >> for each line when executed. Basic idea is to create a closure and
> >> associate that closure with a filename, then run that closure to print
> >> to the log without needing to give the filename over and over again.
> >>
> >> So far so good. But when I write this function, the frames given by
> >> getframeinfo or extract_stack skip the actual calling point of the
> >> function, instead giving back the *point where the closure was
> >> defined*.  (in the above example, it would print /path/to/file.py:3,
> >> /path/to/file.py:3 instead of incrementing to show 4 and 5).
> >>
> >> However, when I insert a pdb statement, it gives me the expected
> >> calling frame where _st is actually called.
> >>
> >> What's going on here? It looks an awful lot like a bug to me, like an
> >> extra frame is being optimized out of of the closure's stack
> >> prematurely.
> >>
> >> I've tried this in python2.7 and python3.3, both show this.
> >>
> >> thanks much for any info,
> >>
> >> Ed
> >>
> >> code follows:
> >> ---
> >>
> >> def stack_trace_closure(message, file_name=None, frame=3):
> >>
> >>     fh = open(file_name, "w+")
> >>
> >>     def _helper():
> >>         return stack_trace(message, frame, fh)
> >>
> >>     return _helper
> >>
> >> def stack_trace(message _frame, fh):
> >>
> >>     _bt = traceback.extract_stack()
> >>
> >>      fh.write( "%s:%s - %s" % (_bt[_frame][0], _bt[_frame][1],
> _message))
> >> _______________________________________________
> >> Python-Dev mailing list -- python-dev@python.org
> >> To unsubscribe send an email to python-dev-le...@python.org
> >> https://mail.python.org/mailman3/lists/python-dev.python.org/
> >> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/4MKHPCRNAJACKIBMLILMQMUPTEVFD3HW/
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/DQBKRUI5ZMU6F3JHIVIZKT32DBOOQOLQ/
>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/UFUE5S27KNZHKVJOUNNN3SM5G6UJ2FHT/

Reply via email to