Python中IDL的stop和.reset的等效实现

8 投票
8 回答
5524 浏览
提问于 2025-04-15 18:24

我对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 用户邮件列表上看到的这个技巧。

撰写回答