Hi Daniel,

I have to admit to just being a python dabbler (I've not used it for
hugely serious projects), but when you hit the exception, you'll still
have your state available to you via locals()

Just playing around:
>>> def blah():
...     try:
...             a = 5
...             raise Exception()
...     except:
...             print "Exception raised and caught"
...             print locals()
...     print "Done"
...
>>> blah()
Exception raised and caught
{'a': 5}
Done

Could that help you restore the state any easier?

Aoife

2009/1/5 Daniel Kersten <[email protected]>:
>
> Padraig, thats kinda what i figured. Pity.
>
> Michael, yes, for what I'm doing now, thats actually perfect. I was
> hoping to be able to use this to add other things to my menu too,
> besides pdb. Luckily I only need pdb for what I'm working on right
> now, so I'll worry about it when I actually need it.
>
> Thanks.
>
> 2009/1/5 Padraig Kitterick <[email protected]>:
>>
>> Daniel Kersten wrote:
>>> My code is something like this:
>>>
>>> while not_done:
>>>     try:
>>>         code()
>>>     except keyboardinterupt:
>>>         print "Menu:"
>>>         print " debug    - run pdb"
>>>         print " resume  - resume program"
>>>         print " abort      - abort program"
>>>         ...
>>>         command = raw_input("> ")
>>>         if command == "debug":
>>>             pdb.set_trace()
>>>         ...
>>>
>>> The idea is that code() is run in a loop executing data (in my case, a
>>> single entry to a log file) and Ctrl-C pauses the program and pops up
>>> a little menu. The problem is that in certain cases, code() may have
>>> already altered data and breaking out and rerunning it will either 1)
>>> lose data or 2) duplicate data.
>>>
>>> The only real solution I can think of is catching the interrupt in a
>>> separate thread which sets a flag telling the main thread to run pdb,
>>> or abort or whatever, but ideally, I'd like to catch the exception and
>>> somehow magically resume.
>>>
>>>
>>> 2009/1/5 Ajurna <[email protected]>:
>>>
>>>> hi,
>>>>     it might be me and im getting this wrong but surely you could use a 
>>>> try:
>>>> except clause?
>>>>
>>>> try:
>>>>     codeloop()
>>>> except keyboardinterupt:
>>>>     mainloop()
>>>>
>>>>
>>>> or something to that effect.
>>>>
>>>> On Mon, Jan 5, 2009 at 3:38 PM, Daniel Kersten <[email protected]> wrote:
>>>>
>>>>> Hi & happy new year,
>>>>>
>>>>> I'm wondering if theres anyway of resuming after a KeyboardInterrupt
>>>>> exception, if I catch it. For example, can I retrieve the code object
>>>>> or stack or something from when execution was interrupted and continue
>>>>> from there.
>>>>>
>>>>> Basically, I would like to use Ctrl-C as a way to temporarily break
>>>>> out of my program to enter a menu (in this particular case, the menu
>>>>> allows you to quit, continue and enter pdb). This works fine in most
>>>>> cases, but if I interrupt in the middle of certain operations, when I
>>>>> resume, I lose data. Of course, I can write my code to avoid this, but
>>>>> that may not always be possible.
>>>>>
>>>>> Any ideas? Or do I need to handle the menu in a separate thread..?
>>>>>
>>>>> Thanks!
>>>>> Dan.
>>>>>
>>>>> --
>>>>> Daniel Kersten.
>>>>> Leveraging dynamic paradigms since the synergies of 1985.
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> ~Ajurna
>>>>
>>>>
>>>
>>>
>>>
>>>
>> AFAIK this isn't really possible to do in Python [1], as it doesn't have
>> the ability to restart after an exception is raised, such as is possible
>> in LISP [2]. You can try to constantly store the current state of all
>> objects to implement a support for a kind of resume, but that would mean
>> altering any code extensively.
>>
>> [1] http://mail.python.org/pipermail/python-list/2005-June/327048.html
>> [2]
>> http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html
>>
>> >
>>
>
>
>
> --
> Daniel Kersten.
> Leveraging dynamic paradigms since the synergies of 1985.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Python Ireland" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.ie/group/pythonireland?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to