我想修改 IPython 默认处理导入错误的方式。当我在 IPython shell 中对某些东西进行原型制作时,我通常会忘记首先 importos
或re
任何我需要的东西。前几个语句通常遵循这种模式:
In [1]: os.path.exists("~/myfile.txt")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-0ffb6014a804> in <module>()
----> 1 os.path.exists("~/myfile.txt")
NameError: name 'os' is not defined
In [2]: import os
In [3]: os.path.exists("~/myfile.txt")
Out[3]: False
当然,这是我有坏习惯的错,当然,在一个有意义的脚本或真实程序中,但在 shell 中,我宁愿 IPython 遵循 DWIM 原则,至少尝试导入我试图使用的内容.
In [1]: os.path.exists("~/myfile.txt")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-0ffb6014a804> in <module>()
----> 1 os.path.exists("~/myfile.txt")
NameError: name 'os' is not defined
Catching this for you and trying to import "os" … success!
Retrying …
---------------------------------------------------------------------------
Out[1]: False
如果使用香草 IPython 无法做到这一点,我该怎么做才能完成这项工作?包装内核是最简单的方法吗?还是应该使用魔术命令直接在核心中实现?
请注意,这与有人希望始终加载预定义模块的那种问题不同。我不。因为我不知道我会做什么,而且我不想加载所有内容(我也不想更新所有内容的列表。