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

2025-03-06 08:51:00
admin
原创
64
摘要:问题描述:while True: reply = input('Enter text') if reply == 'stop': break print(reply.upper()) 结果是:Enter text:Traceback (most recent call last): ...

问题描述:

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

结果是:

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

它只在 Sublime Text 2 中存在。我尝试了 IDLE,尝试了命令行,一切都很完美。Subleme 为什么要对我大喊大叫?

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

先感谢您。


解决方案 1:

我也遇到了同样的问题。Sublime Text 的默认控制台的问题是它不支持输入。

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

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

SublimeREPL 的 GitHub 页面

解决方案 2:

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

您可以使用/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

解决方案 3:

EOF 是一种特殊的带外信号,表示输入结束。它不是一个字符(尽管在旧的 DOS 时代,0x1B 的作用类似于 EOF),而是来自操作系统的表示输入已结束的信号。

在 Windows 上,您可以通过在命令提示符下按 来“输入”EOF Ctrl+Z。这会向终端发出信号以关闭输入流,从而向正在运行的程序显示 EOF。请注意,在其他操作系统或终端仿真器上,通常使用 来发出 EOF 信号Ctrl+D

至于您在 Sublime Text 2 中遇到的问题,似乎stdin在 Sublime 中运行程序时未连接到终端,因此程序开始时连接到一个空文件 (可能是nul/dev/null)。另请参阅Python 3.1 和 Sublime Text 2 错误。

解决方案 4:

截至目前,唯一的解决方案仍然是安装 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"
        }
    },
]

当然,您只需改变“键”参数即可将快捷方式更改为您想要的任何内容。

解决方案 5:

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

在处理管道输入的输入流末尾时,这似乎是 raw_input 的正确用法。参考这篇文章

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用