今天在Pycharm中跑程序时突然发现连用两个input()竟然只有第一个会接收,第二个竟然无法接收,开始还以为是python的问题,但是在命令行中跑发现是正常的。
a=input() b=input() print(a,b)
在Pycharm中运行,然后输入:
abc
def
两次都是用回车换行,输出:
abc
如果再增加一个input:
a=input() b=input() c=input() print(a,b,c)
再输入:
abc
def
会得到:
abc def
可见b是一个空字符串,而def被第三个input接收了。
因此猜测,从pycharm的Run窗体中输入换行会被当成两个换行,导致第二个input接收的字符串为空。
上面两段代码不管是在pycharm中的命令行中执行还是外部的命令行中执行,都是正常的,说明不是系统的问题,而是pycharm的问题。
因为input接收到换行会自动退出,所以无法查看原始输入,所以使用sys.stdin查看:
import sys s = sys.stdin.read() print([ord(i) for i in s])
输入:
a
b
c
(Ctrl+D)
得到:
[97, 10, 10, 98, 10, 10, 99, 10]
我们知道换行的ASCII码是10,可见果然是输入一次换行被当成了两次。
在命令行中执行同样的代码,得到的是预期中的:
[97, 10, 98, 10, 99, 10]
这个bug其实有点难理解,因为我们知道分行方式主要有3种:Windows的rn, Linux的n, Mac的r。这里的换行却被成了3种之外的nn。我的Pycharm是在Linux下的,右下角显示的也是LF(n),而我又试了改成另外两种,发现对这个bug毫无影响,重启后也没有变化。
考虑到我在之前安装了Pycharm中的插件Rainbow Brackets,可能因此出现了不兼容的bug,也可能是Ubuntu或VMware的bug。



