Context-aware return

Sven R. Kunze srkunze at mail.de
Thu Sep 10 20:45:20 CEST 2015


On 10.09.2015 20:34, Sven R. Kunze wrote:
> You are right. I turned out to me harder that I first thought.
>
> My initial guess was like: use AST. But now I see, it would be hard to 
> get the source code.
>
> So, what actually could work, would be faking the interactive 
> interpreter wrapping it up and thus have control over the source code 
> typed in.

Ha, got it:  sys.settrace

 >>> def traceit(frame, event, arg):
...     return traceit

 >>> sys.settrace(traceit)

 >>> a=1
(<frame object at 0x7ff9016785c0>, 'call', None)
(<frame object at 0x7ff9016785c0>, 'line', None)
(<frame object at 0x7ff9016785c0>, 'return', (u'a=1\n', 4))
(<frame object at 0x7ff90168a1f8>, 'call', None)
(<frame object at 0x7ff90168a1f8>, 'line', None)
(<frame object at 0x7ff90168a1f8>, 'return', None)


There you got the source. The use an AST to find out whether the line 
fits your definition of 'interactive'.

That should only be necessary when the top frame is interactive.


Best,
Sven


More information about the Python-list mailing list