【问题标题】:EOF error python [duplicate]EOF错误python [重复]
【发布时间】:2016-06-06 05:30:16
【问题描述】:

我正在用 Python 编写一个简单的代码并收到此错误: 回溯(最近一次通话最后): 文件“prog.py”,第 4 行,在 EOFError:读取一行时出现EOF

我的代码是:

inp = [""]
i=0
while i==0:
    answer = raw_input("")
    if answer!="":
        inp.append(answer)
    else:
        break

for item in inp:
    if item=="42":
        break
    else:
        print item

print ""

【问题讨论】:

  • 您何时收到此错误?我可以用python2 prog.py < /dev/null 生成它...当我输入文本和/或空行时,它会像猜测的那样工作(通过阅读代码)。您想屏蔽 EOFError 还是想了解它发生的原因?
  • 你是如何运行你的脚本的? quite many answers regarding this 已经在这里了,所以也许你应该先阅读其中的一些。
  • 我的代码在 Codeacdemy.com 编译器上也运行良好,但在 Ideone.com 上,它给出了这个错误

标签: python python-2.7 eof


【解决方案1】:

您可以尝试阅读并理解此答案(以帮助您了解 Python 知识):

#! /usr/bin/env python
"""Short description what this module does."""
from __future__ import print_function


inp = []
while True:
    try:
        answer = raw_input("")  # in python v3 use input instead
    except EOFError as e:
        print("Ignored:", e)
        answer = None
    if answer:
        inp.append(answer)
    else:
        break

for item in inp:
    if item == "42":
        break
    else:
        print(item)

print()

这只是尝试更具可读性的编码风格的第一步。

接下来肯定会尝试 python.org 上的原始 Python 教程 ...

上述脚本的调用存储在prog.py中:

$> python2 prog.py < /dev/null

这使得程序从/dev/null 读取作为输入不再导致:

Traceback (most recent call last):
  File "prog.py", line 5, in <module>
    answer = raw_input("")
EOFError: EOF when reading a line

而是:

Ignored: EOF when reading a line
[]

如果您想简单地不打印出Ignored ... 行,并且知道可以静默忽略,则可以将除行/块之外的内容重写为

except EOFError:
    answer = None 

【讨论】:

  • 非常感谢。好的,最后一次:所以你是说对于 ideone.com 这样的在线编译器,我们必须将所有 raw_inputs 替换为:那些尝试和捕获,请告诉我为什么这只发生在像 ideone 这样的在线解释器中,但是有我在其他解释器上的原始代码没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多