Prev: Reading a large bz2 textfile exits early
Next: come and join www.pakdub.com a social network with full features like games, classifieds, forums, blogs and a lot more
From: Krister Svanlund on 20 Feb 2010 18:59 On Sun, Feb 21, 2010 at 12:52 AM, Stef Mientki <stef.mientki(a)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 > Yes, you catch the exception and do nothing.
From: Lie Ryan on 20 Feb 2010 19:21 > On Sun, Feb 21, 2010 at 12:52 AM, Stef Mientki <stef.mientki(a)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"
From: Daniel Fetchinson on 20 Feb 2010 19:32 > I would like my program to continue on the next line after an uncaught > exception, > is that possible ? try: # here is your error except: pass # this will get executed no matter what See http://docs.python.org/tutorial/errors.html HTH, Daniel -- Psss, psss, put it down! - http://www.cafepress.com/putitdown
From: Lie Ryan on 20 Feb 2010 21:17 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(a)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 ... First, read this: http://www.developerfusion.com/code/4325/on-error-resume-next-considered-harmful/ > I already redirected sys.excepthook to my own function, > but now I need a way to get to continue the code on the next line. > Is that possible ? No, not in python. You can (ab)use generators' yield to resume execution, but not in the general case: def on_error_resume_next(func): def _func(*args, **kwargs): gen = func(*args, **kwargs) resp = next(gen) while isinstance(resp, Exception): print 'an error happened, ignoring...' resp = next(gen) return resp return _func @on_error_resume_next def add_ten_error_if_zero(args): if args == 0: # raise Exception() yield Exception() # return args + 10 yield args + 10 print add_ten_error_if_zero(0) print add_ten_error_if_zero(10) A slightly better approach is to retry calling the function again, but as you can see, it's not appropriate for certain cases: def retry_on_error(func): def _func(*args, **kwargs): while True: try: ret = func(*args, **kwargs) except Exception: print 'An error happened, retrying...' else: return ret return _func @retry_on_error def add_ten_error_if_zero(args): if args == 0: raise Exception() return args + 10 print add_ten_error_if_zero(0) print add_ten_error_if_zero(10) 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 Ignoring arbitrary error is against the The Zen of Python "Errors should never pass silently."; not that it is ever a good idea to ignore arbitrary error, when an exception happens often the function is in an indeterminate state, and continuing blindly could easily cause havocs.
From: ssteinerX on 20 Feb 2010 21:43
On Feb 20, 2010, at 9:17 PM, 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(a)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 ... > > First, read this: > http://www.developerfusion.com/code/4325/on-error-resume-next-considered-harmful/ The link goes to an "Oh dear. Gremlins at work!" page. They're probably using On Error Resume Next in their VBScript code and this is the "last resort" page ;-). S |