Python 3中:读取线时EOF(卓异文本2是生气)(Python 3: EOF when rea

2019-06-18 06:35发布

while True:
    reply = input('Enter text')
    if reply == 'stop': break
    print(reply.upper())

其结果是:

 Enter text:Traceback (most recent call last): File "C:\PythonProjects\5.py", line 2, in <module> reply = input('Enter text:') EOFError: EOF when reading a line [Finished in 0.2s with exit code 1] 

这是只有在崇高的文本2.我试过IDLE,试图命令行,一切都是完美的。 我为什么要Subleme喊?

顺便说一句,也许你也可以解释我什么EOF可能在这种情况下的意思。 当然,我已阅读的文档中,如果EOF从输入读取,相应的错误引发。 我想这种情况建模。 输入只有键盘? 如果是,哪些键的组合,我应该投入,得到EOF?

先感谢您。

Answer 1:

我有同样的问题。 与崇高的文本的默认控制台的问题是,它不支持输入。

为了解决这个问题,你必须安装一个名为SublimeREPL包。 SublimeREPL提供Python解释其接受输入。

有一个文章 ,解释了详细的解决方案。

对于SublimeREPL GitHub的页面



Answer 2:

EOF是一个特殊的外的带信号,这意味着输入的结束。 这不是一个字符(虽然在老的DOS天,0x1B表现得像EOF),而是从输入已经结束了OS的信号。

在Windows上,你可以在“输入”的按EOF Ctrl+Z在命令提示符下。 这个信号的终端,关闭输入流,它提供了一个EOF到正在运行的程序。 请注意,在其它操作系统或终端仿真器,EOF是使用通常用信号Ctrl+D

至于与崇高的文本2您的问题,似乎stdin中的崇高在运行程序时没有连接到终端,所以因此程序开始连接到一个空文件(可能是nul/dev/null )。 另见的Python 3.1和崇高文本2错误 。



Answer 3:

help(input)显示了键盘快捷键产生EOF,即Unix上: 按Ctrl-d时,Windows 键:Ctrl-Z +返回

输入([提示]) - >串

从标准输入读取一个字符串。 其后的换行符被剥离。 如果用户点击EOF(Unix上:CTL-d时,Windows:CTL-Z +回车),提高的EOFError。 在Unix上,如果允许使用GNU的readline。 提示字符串,如果给定的,而没有一个尾随的换行符读取之前打印。

你可以使用一个空文件复制它:

$ touch empty
$ python3 -c "input()" < empty
Traceback (most recent call last):
  File "<string>", line 1, in <module>
EOFError: EOF when reading a line

你可以使用/dev/nullnul (Windows)中在阅读一个空文件。 os.devnull显示所使用的操作系统的名称:

$ python3 -c "import os; print(os.devnull)"
/dev/null

注意: input()愉快地接受从文件/管输入。 你不需要stdin连接到终端:

$ echo abc | python3 -c "print(input()[::-1])"
cba

无论是处理EOFError在你的代码:

try:
    reply = input('Enter text')
except EOFError:
    break

或者配置编辑器提供一个非空输入时,它运行脚本例如,通过使用自定义命令行,如果它允许它: python3 "%f" < input_file



Answer 4:

这似乎截至目前,唯一的解决办法仍然是安装SublimeREPL。

为了延长拉哈夫的答案,它可以是相当恼人不得不进入工具 - > SublimeREPL-> Python->运行命令每次要运行与输入的脚本,所以我设计了一个快捷键绑定,可以很方便的时间:

要启用它,去首选项 - >键绑定 - 用户,并在那里复制此:

[
    {"keys":["ctrl+r"] , 
    "caption": "SublimeREPL: Python - RUN current file",
    "command": "run_existing_window_command", 
    "args":
        {
            "id": "repl_python_run",
            "file": "config/Python/Main.sublime-menu"
        }
    },
]

当然,你只需要改变的“钥匙”的说法更改快捷方式到任何你想。



Answer 5:

try:
    value = raw_input()
    do_stuff(value) # next line was found 
except (EOFError):
   break #end of file reached

这似乎与输入从管道输入流结束时要有的的raw_input正确使用。 [参考此信息] [1]



文章来源: Python 3: EOF when reading a line (Sublime Text 2 is angry)