检测是否存在IPython

3

我有同样的代码,有时候在命令行中运行 python source.py,有时候将其复制/粘贴到交互式IPython中。我想以稍微不同的方式执行代码,并尝试将差异嵌入到以下代码块中:

try:
    __IPYTHON__
    # do IPython-mode code
except NameError:
    # do script-mode code

我知道这是Python中常见的一种技术,但它会破坏PyCharm中的自动标记功能,我希望能找到一些更有吸引力的方法来测试IPython是否存在,也许可以通过测试'__IPYTHON__' in ...或类似的方式来进行。但是,我发现这个符号既不在locals()中,也不在globals()中。还有其他地方可以测试它的存在吗?或者有没有其他更传统的测试方法,而不是直接使用异常? 我正在使用Python 2.7.11和IPython 5.1.0。非常感谢。
更新:相关但无用的信息:How do I check if a variable exists?

尝试使用全局函数 get_ipython(),它仅存在于 IPython 中,而不是普通的 shell。 - Guillaume
2个回答

5
我认为您正在寻找的是:
if hasattr(__builtins__, '__IPYTHON__'):
    print('IPython')
else:
    print('Nope')

4

虽然当前被接受的答案在__main__命名空间中可以工作,但由于__builtins__ 是其他命名空间中的字典,因此它无法在包中工作。在Python3中,这应该可以在任何命名空间中工作:

import builtins
getattr(builtins, "__IPYTHON__", False)

感谢您的帮助,我非常感激,+1。 - gt6989b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接