我有一个Python脚本,我想执行它到某一点,然后停止,并保持解释器打开,所以我可以看到它定义的变量等。
我知道我可以生成异常,或者我可以通过运行pdb.set_trace()
来调用调试器,然后停止调试器,这是我目前使用的。
...但是有没有一个命令会停止脚本,好像它已经完全结束了?这相当于评论脚本的其余部分(但我不喜欢这样做),或者在函数中添加早期的return
语句。
似乎这样的东西必须存在,但到目前为止我还没有找到它。
编辑:我的用例的更多详细信息
我通常在Spyder中使用常规Python控制台。 IPython似乎是一件好事,但(至少对于我目前使用的版本,2.2.5),一些普通的控制台功能在IPython中不能很好地工作(内省,自动完成) )。 通常,我的代码生成matplotlib数字。在调试模式下,那些无法更新(据我所知),这就是为什么我需要完全脱离脚本,而不是解释器)。 调试器的另一个限制是我不能在其中执行循环:您可以将循环的代码复制/粘贴到常规控制台中并使其执行,但这不会在调试器中起作用(在至少在我的Spyder版本中。)
答案 0 :(得分:6)
如果使用python -i <script>
调用程序,则解释程序将在脚本结束后保持活动状态。 raise SystemExit
是迫使它在任意点结束的最简单方法。
答案 1 :(得分:5)
如果你有ipython(强烈推荐),你可以去你的程序中的任何一点并添加以下行
import IPython
IPython.embed()
一旦你的程序到达那一点,embed
命令将在该上下文中打开一个新的IPython shell。
我真的很喜欢那些我不想走完全pdb路线的事情。
答案 2 :(得分:2)
如果您使用的是Python Shell,只需按CTRL + C
即可抛出KeyboardInterrupt。然后,您可以在抛出异常时检查程序的状态。
x = 0
while True:
x += 1
运行脚本......
在win32上的Python 2.7.6(默认,2013年11月10日,19:24:18)[MSC v.1500 32位(英特尔)] 输入“copyright”,“credits”或“license()”以获取更多信息。 &GT;&GT;&GT; ================================ RESTART ================= ===============
追踪(最近一次呼叫最后一次):
文件“C:/Python27/test.py”,第2行,
而True:
一个KeyboardInterrupt
&GT;&GT;&GT; X
15822387