Is there a way to continue after an exception ?

Stef Mientki stef.mientki at gmail.com
Sun Feb 21 19:32:21 EST 2010


On 21-02-2010 03:51, Ryan Kelly wrote:
> On Sun, 2010-02-21 at 13:17 +1100, Lie Ryan wrote:
>    
>> On 02/21/10 12:02, Stef Mientki wrote:
>>      
>>> On 21-02-2010 01:21, Lie Ryan wrote:
>>>        
>>>>> On Sun, Feb 21, 2010 at 12:52 AM, Stef Mientki
>>>>>            
>> <stef.mientki at gmail.com>  wrote:
>>      
>>>>>            
>>>>>> hello,
>>>>>>
>>>>>> I would like my program to continue on the next line after an uncaught
>>>>>> exception,
>>>>>> is that possible ?
>>>>>>
>>>>>> thanks
>>>>>> Stef Mientki
>>>>>>
>>>>>>
>>>>>>              
>>>> That reminds me of VB's "On Error Resume Next"
>>>>
>>>>          
>>> I think that's what I'm after ...
>>>        
>> A much better approach is to use callbacks, the callbacks determines
>> whether to raise an exception or continue execution:
>>
>> def handler(e):
>>      if datetime.datetime.now()>= datetime.datetime(2012, 12, 21):
>>          raise Exception('The world has ended')
>>      # else: ignore, it's fine
>>
>> def add_ten_error_if_zero(args, handler):
>>      if args == 0:
>>          handler(args)
>>      return args + 10
>>
>> print add_ten_error_if_zero(0, handler)
>> print add_ten_error_if_zero(10, handler)
>> print add_ten_error_if_zero(0, lambda e: None) # always succeeds
>>      
>
> Or if you don't like having to explicitly manage callbacks, you can try
> the "withrestart" module:
>
>      http://pypi.python.org/pypi/withrestart/
>
> It tries to pinch some of the good ideas from Common Lisp's
> error-handling system.
>
>    from withrestart import *
>
>    def add_ten_error_if_zero(n):
>        #  This gives calling code the option to ignore
>        #  the error, or raise a different one.
>        with restarts(skip,raise_error):
>            if n == 0:
>                raise ValueError
>        return n + 10
>
>    # This will raise ValueError
>    print add_ten_error_if_zero(0)
>
>    # This will print 10
>    with Handler(ValueError,"skip"):
>        print add_ten_error_if_zero(0)
>
>    # This will exit the python interpreter
>    with Handler(ValueError,"raise_error",SystemExit):
>        print add_ten_error_if_zero(0)
>
>
>
>    Cheers,
>
>        Ryan
>
>
>    
thanks Ryan (and others),

your description of withstart  was very informative,
and I think I understand why it's impossible what I want
(something like madExcept for Delphi / C / C++, see
*http://www.madshi.net/madExceptDescription.htm )
*
It are not the bugs that you can predict / expect to catch,
but the uncaught bugs.

So made some first steps,
and this seems to be sufficient for now,
if you're interested, look here,
   http://mientki.ruhosting.nl/data_www/pylab_works/pw_bug_reporter.html

cheers,
Stef



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100222/72997140/attachment-0001.html>


More information about the Python-list mailing list