Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在调试器中设置sys.exit()_Python_Pdb - Fatal编程技术网

Python 在调试器中设置sys.exit()

Python 在调试器中设置sys.exit(),python,pdb,Python,Pdb,我的节目出人意料地结束了。当我通过pdb运行它时,它以以下内容结束: The program exited via sys.exit(). Exit status: 但是在它退出的实例上没有堆栈的记录。我不知道为什么会这样。除了执行步骤和下一步之外,是否有一种方法可以在尝试执行此操作时指示pdb进入调试器,而不是执行sys.exit() 一个简单的i

我的节目出人意料地结束了。当我通过pdb运行它时,它以以下内容结束:

The program exited via sys.exit(). Exit status:                                                                         

但是在它退出的实例上没有堆栈的记录。我不知道为什么会这样。除了执行
步骤
下一步
之外,是否有一种方法可以在尝试执行此操作时指示
pdb
进入调试器,而不是执行
sys.exit()

一个简单的ish解决方案是在运行之前运行monkey patch
sys.exit()

$ python -m pdb my_script.py

(Pdb) def no_exit(code): raise RuntimeError('halt')
(Pdb) import sys
(Pdb) sys.exit = no_exit
(Pdb) cont

我试过了,但还是一样。。pdb好像在骗我?或者它仍然报告程序通过sys.exit()退出。退出状态:即使c-code绕过sys.Exit()结束进程?@gerrit似乎认为pdb假设因为没有引发异常,“SystemExit不保证事后会话”不确定如何在sys.Exit之后“强制”事后会话:/“当作为脚本调用时,如果正在调试的程序异常退出,pdb将自动进入后期调试。在事后调试(或程序正常退出)后,pdb将重新启动程序。“对我来说,有效的方法是将整个程序包装在一个try-except block@ChristabellaIrwanto中。如果您只想在程序运行后放在控制台中,
python-i myscript.py
起到了作用。