简体   繁体   中英

Does raising a manual exception in a python program terminate it?

Does invoking a raise statement in python cause the program to exit with traceback or continue the program from next statement? I want to raise an exception but continue with the remainder program. Well I need this because I am running the program in a thirdparty system and I want the exception to be thrown yet continue with the program. The concerned code is a threaded function which has to return . Cant I spawn a new thread just for throwing exception and letting the program continue?

I want to raise an exception but continue with the remainder program.

There's not much sense in that: the program control either continues through the code, or ripples up the call stack to the nearest try block.

Instead you can try some of:

  • the traceback module (for reading or examining the traceback info you see together with exceptions; you can easily get it as text)
  • the logging module (for saving diagnostics during program runtime)

Example:

def somewhere():
    print 'Oh no! Where am I?'
    import traceback
    print ''.join(traceback.format_stack())  # or traceback.print_stack(sys.stdout)
    print 'Oh, here I am.'

def someplace():
    somewhere()

someplace()

Output:

Oh no! Where am I?
  File "/home/kos/exc.py", line 10, in <module>
    someplace()
  File "/home/kos/exc.py", line 8, in someplace
    somewhere()
  File "/home/kos/exc.py", line 4, in somewhere
    print ''.join(traceback.format_stack())

Oh, here I am.

Only an uncaught exception will terminate a program. If you raise an exception that your 3rd-party software is not prepared to catch and handle, the program will terminate. Raising an exception is like a soft abort: you don't know how to handle the error, but you give anyone using your code the opportunity to do so rather than just calling sys.exit() .

If you are not prepared for the program to exit, don't raise an exception. Just log the error instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM