python -i prog.py -h
当调用上面的命令时,我得到了带有回溯的预期输出和' SystemExit:0'。没有' -i'我得到了没有回溯的预期输出。为什么会发生这种情况,是否有办法在没有回溯的情况下在同一命令中使用python标志和程序标志?
答案 0 :(得分:1)
使用-i
标志运行Python会更改SystemExit
异常的处理,该异常用于sys.exit
之类的内容。通常,未被捕获的SystemExit
会导致Python无声地退出。但是,在-i
打开的情况下,SystemExit
被视为任何其他异常,带有回溯和所有内容。
如果您希望在SystemExit
开启时隐藏-i
回溯,则需要明确捕捉并忽略它们。例如,
def main():
try:
...
except SystemExit:
# Catch the exception to silence the traceback when running under python -i
pass
if __name__ == '__main__':
main()
答案 1 :(得分:1)
来自docs:
exception SystemExit
This exception is raised by the sys.exit() function. When it is not handled, the Python interpreter exits; no stack traceback is printed.
argparse使用带有'-h'选项的SystemExit异常,并且由于您使用命令行参数'-i'进入交互模式,因此您会看到回溯。请注意,如果您实现并发送其他选项,则回溯不打印:
python -i prog.py -p 80
我能想到的两个即时的“快速解决方案”(但实际上,这取决于你真正需要的是什么?)
在解析参数时输入try-except子句。
python -i prog.py -h 2> / dev / null