如果我从命令行执行该函数时遇到异常,我想退出Python,但是如果我的函数不是从命令行运行的,我想引发一个异常并打印堆栈跟踪。

现在我有

    try:
        #...
    except Exception as e:
        print('ERROR: Some useful message')
        if __name__ == '__main__':
            raise SystemExit
        else:
            raise e


但我觉得我在这里做的太多或太少。

从命令行运行我的函数时,是否有惯用的方法来获取堆栈跟踪并获得原始异常;但是如果它是从命令行运行的,则直接退出?

最佳答案

更好的方法是这样做:

import sys

def func():
    do_actual_processing()
    if not successful:
        raise Exception("Yadayada")

if __name__ == '__main__'
    try:
        func()
    except Exception as e:
        sys.exit(1)


即,该函数本身不必关心是否从命令行运行。

10-01 02:04