D
djw
c.l.p-
I am having trouble understanding how one is supposed to correctly
utilize try:...except:...finally: in real code. If I have a block of
code like:
def foo():
try:
... some code that can raise an exception ...
finally:
... do some cleanup ...
return something
If any exception occurs in the code inside the try:...finally:, it will
fail silently, which is a bad thing.
So, the obvious thing to do (I think) is:
def foo():
try:
try:
... some code that can raise an exception ...
except someerror:
... handle the error...
finally:
... do some cleanup ...
return something
But, now the finally doesn't really serve any purpose, if all the
exceptions are handled by except:, finally will never be called as a
result of an exception, only as the last statements of the function.
So, the next step is to do this?
def foo():
try:
try:
... some code that can raise an exception ...
except someerror:
... handle the error...
raise someerror
finally:
... do some cleanup ...
return something
Which, I guess will work, but it feels very awkward. Is this the
preferred/"correct" way to handle this? Is there a more elegant solution?
Also, why is this construct not possible?:
try:
... some code that can raise an exception ...
except someerror:
... handle the error...
finally:
... do cleanup, etc. ...
Thanks,
Don
I am having trouble understanding how one is supposed to correctly
utilize try:...except:...finally: in real code. If I have a block of
code like:
def foo():
try:
... some code that can raise an exception ...
finally:
... do some cleanup ...
return something
If any exception occurs in the code inside the try:...finally:, it will
fail silently, which is a bad thing.
So, the obvious thing to do (I think) is:
def foo():
try:
try:
... some code that can raise an exception ...
except someerror:
... handle the error...
finally:
... do some cleanup ...
return something
But, now the finally doesn't really serve any purpose, if all the
exceptions are handled by except:, finally will never be called as a
result of an exception, only as the last statements of the function.
So, the next step is to do this?
def foo():
try:
try:
... some code that can raise an exception ...
except someerror:
... handle the error...
raise someerror
finally:
... do some cleanup ...
return something
Which, I guess will work, but it feels very awkward. Is this the
preferred/"correct" way to handle this? Is there a more elegant solution?
Also, why is this construct not possible?:
try:
... some code that can raise an exception ...
except someerror:
... handle the error...
finally:
... do cleanup, etc. ...
Thanks,
Don