从stdin读取时出现EOF错误 - Python3

时间:2014-10-10 20:56:20

标签: python python-3.x

当我运行此脚本并按CTR-D结束我对程序的输入时,我收到以下错误:

错误:

My-MacBook-Pro-2:python me$ python3 test.py 
>> Traceback (most recent call last):
  File "test.py", line 4, in <module>
    line = input(">> ")
EOFError

脚本

import sys

while(1):
    line = input("Say Something: ")
    print(line)

为什么会这样?

2 个答案:

答案 0 :(得分:1)

当您使用input时,无需发送EOF来结束输入;只需按Enter键。 input旨在读取,直到发送换行符。

如果您正在寻找一种突破while循环的方法,可以使用CTRL + D,然后抓住EOFError

try:
    while(1):
        line = input("Say Something: ")
        print(line)
except EOFError:
    pass

答案 1 :(得分:0)

这不太可能对阿波罗有所帮助(此外,问题已经4岁了,但这可能会帮助像我这样的人。

我遇到了同样的问题,并且没有按下任何键,相同的代码将立即终止为EOFError。就我而言,罪魁祸首是先前在同一终端中执行的另一个脚本,该脚本已将stdin设置为非阻塞模式。

如果原因相同,这应该会有所帮助:

flag = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL)
fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, flag & ~os.O_NONBLOCK)

我确定了令人讨厌的Python脚本并进行了更正。其他带有input()的脚本现在可以正常工作了。

编辑(上面还有一些错字): 这应该让您查看STDIN是否为非阻塞模式:

import os
import sys
import fcntl
flag = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL)
print(
    "STDIN is in {} mode"
    .format(
        ("blocking", "non-blocking")[
            int(flag & os.O_NONBLOCK == os.O_NONBLOCK)
        ]
    )
)