On May 29, 8:21 am, Michele Petrazzo <michele.petra...@remove_me_unipex.it> wrote: > Hi all, > 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? > > Thanks, > Michele > > 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"] > > My error: > File "tmp/test_exec.py", line 14, in <module> > env["a_funct"]() > File "<string>", line 5, in a_funct > ZeroDivisionError: integer division or modulo by zero
The code you posted defines a function, and if the definition of it raises an exception, it will enter your except clause. By the way, you generally should avoid 'bare' except clauses, and specify the type of error you want to catch, in this case, 'ZeroDivisionError', as you see (just good practice stuff). It's not clear from your attempt what your exact goal was. You probably mean: STR = """ class Globals: err = 0 def a_funct(): try: 1/0 except ZeroDivisionError: import traceback Globals.err = traceback.format_exc() """ Note that the formatted exception will be available in 'env ["Globals"].err'. But you could also mean: exec STR in env try: env["a_funct"]() except ZeroDivisionError: import traceback err = traceback.format_exc() Then the formatted exception will be available in 'err'. Do you want the exception-handling to be part of the function you are entering into 'env'? -- http://mail.python.org/mailman/listinfo/python-list