Python中//#::命令疑问:执行后等待原因及作用求解
为啥你的IPython代码会陷入等待状态?
嘿,我来给你捋清楚这个问题!你遇到的程序等待情况,根源完全在那个//#::标记上——这玩意儿是IPython(就是你用的In [x]这种交互式环境)里的特殊语法,触发了它的cell magic功能,但你没写全参数,导致IPython卡壳了。
先看你贴的代码:
In [15]: print('standard python') In [16]: //#:: ...: ...: hello ...: print('hey') ...: exit() ...:
具体原因
IPython里支持一种以//开头的注释风格魔法命令,//#::其实是%%script魔法命令的简写形式。这个魔法命令的作用是把整个cell的内容当作外部脚本,调用指定的解释器去执行。但你只写了//#::,却没告诉IPython要用什么解释器(比如应该写成//#:: python),这就导致IPython以为你要启动一个外部进程,但又不知道启动啥,于是就一直傻等外部进程的输入或者结束信号,自然就陷入等待状态了。
另外提一句,下面的hello不是有效的Python语句,就算魔法命令正常执行也会报错,但现在的核心问题还是那个标记导致的等待。
解决办法
- 要是只是想写注释,直接用Python标准的
#就行,别碰//#::这种IPython专属的特殊标记 - 要是真的想用这个cell magic功能,记得补全解释器,比如写成
//#:: python,不过其实在IPython里直接写普通代码就够了,没必要多此一举
还有个小细节:这种情况只会在IPython环境(比如Jupyter Notebook、IPython终端)里出现,标准Python解释器根本不认识//#::,直接会报语法错误,这也是你觉得“奇怪”的原因——你肯定是在IPython环境里跑的这段代码~
内容的提问来源于stack exchange,提问作者gui3
相关产品推荐
相关产品推荐

