On Thu, 12 Jul 2012 14:20:18 +0100, andrea crotti wrote: > One thing that I don't quite understand is why some calls even if I > catch the exception still makes the whole program quit.
Without seeing your whole program, we can't possibly answer this. But by consulting my crystal ball, I bet you have something like this: try: do_stuff() # run your program except Exception as e: # pointlessly catch exceptions I can't handle, which has the # bonus of making debugging MUCH MUCH harder print("here") # end of file, nothing further to do When do_stuff() fails, "here" gets printed, and then the program exits because there's nothing else to do. Catching exceptions doesn't magically cause the code to continue from the point of the error. It doesn't work like that. Execution skips from where the error occurred to the except clause. Once the except clause has run, anything following the except clause runs, and then the program ends as normal. If you haven't already done so, I recommend you go through the tutorial: http://docs.python.org/py3k/tutorial/index.html in particular the part about exception handling: http://docs.python.org/py3k/tutorial/errors.html > For example this > > try: > copytree('sjkdf', 'dsflkj') > Popen(['notfouhd'], shell=True) > except Exception as e: > print("here") What is "Popen" and where is it from? My first guess was os.popen, but that doesn't take a shell argument: py> os.popen(['ls', '-l'], shell=True) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: popen() got an unexpected keyword argument 'shell' > behaves differently from: > > try: > Popen(['notfouhd'], shell=True) > copytree('sjkdf', 'dsflkj') > except Exception as e: > print("here") > > because if copytree fails it quits anyway. Well of course it does. If copytree fails, the try block ends and execution skips straight to the except block, which runs, and then the program halts because there's nothing else to be done. That at least is my guess, based on the described symptoms. -- Steven -- http://mail.python.org/mailman/listinfo/python-list