Python 3:读取一行时的EOF(Sublime Text 2很生气)

Kif*_*sif 34 python eof python-3.x sublimetext2

while True:
    reply = input('Enter text')
    if reply == 'stop': break
    print(reply.upper())
Run Code Online (Sandbox Code Playgroud)

结果是:

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]
Run Code Online (Sandbox Code Playgroud)

它只在Sublime Text 2.我试过IDLE,试过命令行,一切都很完美.为什么Subleme会对我大喊大叫?

顺便说一句,也许你也可以解释我在这种情况下可能意味着什么.当然,我在文档中已经读过,如果从输入中读取EOF,则会引发相应的错误.我想模仿这种情况.仅输入键盘?如果是,我应该输入什么组合键才能获得EOF?

先感谢您.

Rag*_*dar 35

我有同样的问题.Sublime Text的默认控制台的问题是它不支持输入.

要解决它,您必须安装一个名为SublimeREPL的包.SublimeREPL提供了一个接受输入的Python解释器.

一篇文章详细解释了解决方案.

SublimeREPL的GitHub页面


nne*_*neo 10

EOF是一种特殊的带外信号,意味着输入结束.它不是一个角色(虽然在旧的DOS时代,0x1B的行为类似于EOF),而是来自操作系统的输入结束的信号.

在Windows上,您可以通过Ctrl+Z在命令提示符下按"输入"EOF .这向终端发信号以关闭输入流,该输入流向正在运行的程序呈现EOF.请注意,在其他操作系统或终端仿真器上,通常使用EFF信号通知Ctrl+D.

至于Sublime Text 2的问题,stdin在Sublime中运行程序时似乎没有连接到终端,因此程序开始连接到空文件(可能nul或者/dev/null).另请参见Python 3.1和Sublime Text 2错误.


jfs*_*jfs 10

help(input)显示了哪些键盘快捷键产生EOF,即Unix : Ctrl-D,Windows Ctrl-Z+Return::

输入([提示]) - >字符串

从标准输入中读取字符串.删除尾随换行符.如果用户点击EOF(Unix:Ctl-D,Windows:Ctl-Z + Return),则引发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
Run Code Online (Sandbox Code Playgroud)

您可以使用/dev/nullnul(Windows)作为空文件进行阅读.os.devnull显示您的操作系统使用的名称:

$ python3 -c "import os; print(os.devnull)"
/dev/null
Run Code Online (Sandbox Code Playgroud)

注意:input()愉快地接受来自文件/管道的输入.您无需stdin连接到终端:

$ echo abc | python3 -c "print(input()[::-1])"
cba
Run Code Online (Sandbox Code Playgroud)

处理EOFError代码:

try:
    reply = input('Enter text')
except EOFError:
    break
Run Code Online (Sandbox Code Playgroud)

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


Mat*_* R. 5

到目前为止,唯一的解决方案仍然是安装SublimeREPL.

为了扩展Raghav的答案,每次要使用输入运行脚本时都必须进入Tools-> SublimeREPL-> Python-> Run命令会非常烦人,所以我设计了一个方便的快速键绑定:

要启用它,请转到首选项 - >键绑定 - 用户,并在其中复制:

[
    {"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"
        }
    },
]
Run Code Online (Sandbox Code Playgroud)

当然,您只需更改"keys"参数即可将快捷方式更改为您想要的任何内容.