如何在阅读一行时删除EOFError:EOF?

时间:2017-03-19 20:05:25

标签: python python-3.x

基本上,我必须检查特定图案是否出现在一行中。如果是,我必须打印该行,否则不打印。所以这是我的代码:

p = input()
 while 1:
   line = input()
   a=line.find(p)
   if a!=-1:
     print(line)
   if line=='':
     break

此代码似乎很好,并被接受为正确的答案。但是有一个问题。我在读取代码测试网站忽略的一行时遇到运行时错误EOFError:EOF。

我有三个问题: 1)为什么被忽视? 2)如何删除它? 3)有没有更好的方法来解决问题?

3 个答案:

答案 0 :(得分:13)

没有什么被忽视的。根据{{​​3}} input在遇到文件结束条件时引发EOFError。基本上,input让你知道我们在这里完成了没有什么可读的。你应该等待这个例外,当你得到它时,只需从你的函数返回或终止程序。

def process_input():
    p = input()
    while True:
        try:
            line = input()
        except EOFError:
            return
        a = line.find(p)             
        if a != -1:
            print(line)
        if line=='':
            return

答案 1 :(得分:0)

VS代码修复:

我在使用VS Code时遇到了相同的错误,这对我有用。我已将launch.json文件中的“控制台”行修改为:

"console": "internalConsole"

我这样做是为了避免每次(F5)运行程序时都无法打印。但是,此修改导致它在调试控制台中运行,这显然不喜欢输入功能。

此后,我将其更改为:

"console": "integratedTerminal"

在程序开始时,我只是使用以下代码清除终端屏幕(我在Windows中):

#windows command to clear screen
import os
os.system('cls')

现在,当我(F5)在VScode中运行程序时,它将在内置终端中执行,清除首先显示的路径垃圾,并且像您期望的那样正常工作。我的猜测是,您正在使用的代码测试网站正在某种调试控制台中运行,类似于VSCode中发生的调试控制台,因为您的代码在repl.it(https://repl.it/languages/python3)上运行良好。您的代码没有任何问题,而且此EOF错误也没有任何正常或预期的情况。

答案 2 :(得分:-3)

您可以使用EOFError在代码中使用try-except块。