try except inside exec
alex23
wuwei23 at gmail.com
Mon Jun 1 00:24:19 EDT 2009
Michele Petrazzo <michele.petrazzo at REMOVE_me_unipex.it> wrote:
> I want to execute a python code inside a string and so I use the exec
> statement. The strange thing is that the try/except couple don't catch
> the exception and so it return to the main code.
> Is there a solution to convert or make this code work?
>
> My code:
>
> STR = """
> err = 0
> try:
> def a_funct():
> 1/0
> except:
> import traceback
> err = traceback.format_exc()
> """
>
> env = {}
> exec STR in env
> env["a_funct"]()
> print env["err"]
Hello Michele,
>From your code, I'm not sure if you're aware that functions are
themselves objects within Python. You could avoid the use of exec
entirely by doing something like the following:
import traceback
class FuncTester(object):
def __init__(self, function):
self.function = function
def test(self, *args, **kwargs):
self.result, self.error = None, None
try:
self.result = self.function(*args, **kwargs)
success = True
except:
self.error = traceback.format_exc()
success = False
return success
>>> def f(x): return 'f does this: %s' % x
...
>>> ft = FuncTester(f) # note that we're referring to the function directly
>>> ft.test('foo')
True
>>> ft.result
'f does this: foo'
>>> ft.test()
False
>>> print ft.error
Traceback (most recent call last):
File "tester.py", line 10, in test
self.result = self.function(*args, **kwargs)
TypeError: f() takes exactly 1 argument (0 given)
I think you'll find this approach to be a lot more flexible than using
exec.
Hope this helps,
alex23
More information about the Python-list
mailing list