I tried to handle bu using following code snippet
if __name__ == "__main__":
try:
main() #main contains sys.exit(1)
except KeyboardInterrupt:
print "aborted by user"
except SystemExit:
pass
But it does not work.
Can anyone help me out ???
Though KeyboradInterrupt is handled, but why SystemExit is not
handles ????
Regards
Asit Dhal
> My program contains some sys.exit(1) and when its executed an
> exception known as SystemExit is thrown.
This is normal behaviour - but you should not "see" the SystemExit. Do you
mean that a stack trace appears in the console?
> I tried to handle bu using following code snippet
>
> if __name__ == "__main__":
> try:
> main() #main contains sys.exit(1)
> except KeyboardInterrupt:
> print "aborted by user"
> except SystemExit:
> pass
>
> But it does not work.
I've tested adding this:
def main():
sys.exit(1)
and it exited normally, even after removing the SystemExit clause.
> Can anyone help me out ???
>
> Though KeyboradInterrupt is handled, but why SystemExit is not
> handles ????
Perhaps there is another try/except somewhere else that handles SystemExit?
Look for bare except clauses, like
try:
except: ...
They should *not* be used. With Python 2.5 and above, theh "catch-all"
should be written as:
try:
except Exception: ...
If you are using 2.4 or earlier, should be:
try:
except (SystemExit, KeyboardInterrupt): raise
except: ...
--
Gabriel Genellina
> My program contains some sys.exit(1) and when its executed an
> exception known as SystemExit is thrown.
>
> I tried to handle bu using following code snippet
>
> if __name__ == "__main__":
> try:
> main() #main contains sys.exit(1)
> except KeyboardInterrupt:
> print "aborted by user"
> except SystemExit:
> pass
>
> But it does not work.
It works for me:
>>> try:
... sys.exit()
... except SystemExit:
... pass
...
>>>
What does it do for you? Crash? Exit? print garbage to the screen?
I'm going to guess what you are doing. Do you have code like this?
try:
main() #main contains sys.exit(1)
except KeyboardInterrupt:
print "aborted by user"
except SomeOtherException, SystemExit:
pass
This will mask SystemExit and stop it from being caught. It should be
written like this:
except (SomeOtherException, SystemExit):
pass
Or possibly something like this?
try:
main() #main contains sys.exit(1)
except KeyboardInterrupt:
print "aborted by user"
except Exception:
do_something()
raise
except SystemExit:
pass
The Exception clause will catch SystemExit before the SystemExit clause will
see it. That should be written like this:
except SystemExit:
pass
except Exception:
do_something()
raise
--
Steven
This is my fault. Exception was thrown before the main function.