【问题标题】:What's wrong with raw_input() (EOFError: EOF when reading a line)raw_input() 有什么问题(EOFError: EOF when read a line)
【发布时间】:2014-01-27 15:38:50
【问题描述】:

我使用的是python 2.7.6,在调用raw_input()时出现异常:

flight_name = raw_input('\nEnter the name of Flight: ')

我找到了解决办法,但是为什么会出现这样的异常呢?是包吗?

try:
      flight_name = raw_input('\nEnter the name of Flight: ')
except (EOFError):
      break

【问题讨论】:

  • 您向raw_input 提供什么输入?你能发布完整的堆栈跟踪吗?
  • 我输入了一些航班名称,例如'London-Paris',然后查看我的航班名称并检查它是否等于smth
  • @user3238724,您使用的是 sublime 还是类似的东西?见:stackoverflow.com/questions/17758782/…
  • @Litwisha:那么基本原因相同;您的 IDE 控制台不支持输入。

标签: python


【解决方案1】:

你可以使用:

sys.stdin = open('/dev/tty')
answer = raw_input('Commit anyway? [N/y] ')

来源:https://stackoverflow.com/a/7437724/1465640

【讨论】:

  • 不,你不能,不能在 PyCharm IDE 控制台中。这仅在您已经在终端中但stdin 是管道时才有效。
  • 这个问题没有提到任何关于 PyCharm 的内容。如果用户像我一样搜索raw_input + EOFError,他会找到这个问题。是的,埋在 cmets 中有一行提到 PyCharm,但只要问题没有提及 PyCharm,这是一个有效的答案。
  • 如果没有该评论,问题就太模糊了,无法回答,我正在考虑关闭它;另一种方法是我们在其中编辑该细节。即使这不仅仅是一个 IDE,将 sys.stdin 设置为 /dev/tty 也只有在有 一个 TTY 可以连接,并且如果 @ 987654327@ 尚未连接到 TTY。
【解决方案2】:

这个答案

sys.stdin = open('/dev/tty')
answer = raw_input('Commit anyway? [N/y] ')
如果您之前在代码中阅读过 sys.stdin,则

很有用。在这种情况下,raw_input 行将在不等待用户输入的情况下抛出 EOF 错误,如果您在 raw_input 之前设置 sys.stdin = open('/dev/tty'),它会重置标准输入并允许用户输入工作. (在 python 2.7 中测试)与

## test.py
import sys
for line in sys.stdin:
  pass
#sys.stdin = open('/dev/tty')
raw_input("Are you sure?")

回显'abc' | python test.py

引发:

EOFError:读取一行时出现EOF

直到您取消注释倒数第二行。

【讨论】:

    【解决方案3】:

    您正试图从标准输入中读取某些内容,但您没有得到任何内容,只有 EOF。这实际上让您知道用户没有提供任何输入,您可以针对这种情况做其他事情。

    【讨论】:

    • 但我实际上输入了一些航班名称。为什么它不起作用?
    • 如何输入航班名称?您使用的是哪些键?
    • 例如伦敦-巴黎
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多