Python中IDL的stop和.reset的等效实现
我对Python还比较陌生,但有一点使用IDL的经验。我想知道有没有Python中和IDL的stop和.reset命令相对应的命令。
在我运行一个IDL脚本时,如果我在里面放了一个stop命令,基本上它的作用就是在那一行停止脚本的执行,然后让我可以在脚本中间访问命令行。这样我就能使用在stop命令之前定义的所有函数和变量,这对调试非常有帮助。
我觉得.reset命令也非常有用。它的作用是重置IDL环境(清除所有变量、函数等)。就好像我关闭了当前会话又重新打开了一个新会话,但不需要退出和重启IDL。我发现如果我在调试自己写的脚本时,有时候从头开始是很有用的,而不需要重置IDL(现在是Python)。在Python中,如果能取消导入之前导入的模块,那也会很有帮助。
如果有人能帮我解决这些问题,我将非常感激。
谢谢
相关链接
8 个回答
1
使用pdb,就像这个简短的脚本一样。在命令行运行它,PDB提示符会神奇地出现,这样你就可以逐步执行代码、评估任意表达式等等。
#!/usr/bin/env python
import pdb;
print 1
print 2
pdb.set_trace()
print 3
print 4
1
stop
的作用和使用 code
模块是差不多的。而 .reset
在 Python 中没有直接对应的功能,除非你随便用一下 del
。
3
IPython 是一个比标准的 Python 解释器更好用的交互式编程环境,它可能能满足你的需求:
from IPython.Shell import IPShellEmbed
start_shell = IPShellEmbed()
def times_2(x):
return 2*x
a = 5
start_shell()
# now in IPython shell
# a -> 5
# times_2(a) -> 10
需要注意的是,你在这个环境里所做的任何更改不会在退出时返回到主 Python 进程中——比如,如果你在 IPython 中把 a 设置为 10,那么在主 Python 进程中,a 仍然是 5。
补充:这是我第一次在 IPython 用户邮件列表上看到的这个技巧。