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?
先感谢您。
我有同样的问题。 与崇高的文本的默认控制台的问题是,它不支持输入。
为了解决这个问题,你必须安装一个名为SublimeREPL包。 SublimeREPL提供Python解释其接受输入。
有一个文章 ,解释了详细的解决方案。
对于SublimeREPL GitHub的页面
EOF是一个特殊的外的带信号,这意味着输入的结束。 这不是一个字符(虽然在老的DOS天,0x1B表现得像EOF),而是从输入已经结束了OS的信号。
在Windows上,你可以在“输入”的按EOF Ctrl+Z
在命令提示符下。 这个信号的终端,关闭输入流,它提供了一个EOF到正在运行的程序。 请注意,在其它操作系统或终端仿真器,EOF是使用通常用信号Ctrl+D
。
至于与崇高的文本2您的问题,似乎stdin
中的崇高在运行程序时没有连接到终端,所以因此程序开始连接到一个空文件(可能是nul
或/dev/null
)。 另见的Python 3.1和崇高文本2错误 。
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/null
或nul
(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
这似乎截至目前,唯一的解决办法仍然是安装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"
}
},
]
当然,你只需要改变的“钥匙”的说法更改快捷方式到任何你想。
try:
value = raw_input()
do_stuff(value) # next line was found
except (EOFError):
break #end of file reached
这似乎与输入从管道输入流结束时要有的的raw_input正确使用。 [参考此信息] [1]