如何引发EOF错误?

时间:2018-06-29 15:25:59

标签: python exception-handling eoferror

我是学习python的新手。请看下面的代码(来自Goodrich等人的“ Python中的数据结构和算法”)。

age = -1   # an initially invalid choice
while age <= 0:
    try:
        age = int(input('Enter your age in years: '))
        if age <= 0:
            print('Your age must be positive.')
    except ValueError:
        print('That is an invalid age specification.')
    except EOFError:
        print('There was an unexpected error reading input.')
        raise  # let's re-raise this exception.

我知道什么是ValueError。例如,如果输入是字符而不是整数,则会发生ValueError。

另一方面,我不知道EOFError何时升高。

  1. 我无法理解“重新引发此例外”的含义

  2. 这本书说,“如果控制台输入失败,则对输入的调用将引发EOFError。”同样,我不知道什么是控制台输入以及什么时候控制台输入失败。

我尝试了几种提高EOFError的方法,但是每次尝试都只有ValueError。有人可以给我一些想法吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

您捕获了异常,这意味着Python将继续循环,而不是让异常遍及整个堆栈,如果程序仍然未被捕获,则最终结束该程序。在prompt.addTextField { (textfield) in textfield.keyboardType = .emailAddress } 子句中不带参数的情况下调用raise只会再次引发相同的异常,等效于

except

如果您实际上没有处理异常,则有必要重新引发异常,而只是在(可能)其他人处理该异常之前添加其他日志。

触发 except EOFError as exc: print("Unexpected error") raise exc 可以通过运行

完成
EOFError

所有尝试从$ python -c 'input()' < /dev/null Traceback (most recent call last): File "<string>", line 1, in <module> EOFError: EOF when reading a line 读取的尝试都看起来像是从文件末尾读取的尝试。

答案 1 :(得分:1)

来自input's documentation

  

读取EOF时,将引发EOFError

EOF是在输入流到达末尾时发送的,或者是从控制台输入的,这意味着用户在* NIX上按ctrl-D,在Windows上按ctrl-Z。

您可以捕获EOFError异常并中断while循环,以优雅地结束程序,因此请将异常块更改为:

except EOFError:
    print('Done.')
    break

答案 2 :(得分:0)

如果您想提出一个 以下代码将在Python中产生SyntaxError,EOF:

print(“ EOF现在在哪里?”

这是测试以查看EOF发生的位置...怀疑是EOF第4行

print(“世界你好!”

不过,我不确定这是否就是“引发错误”的意思。 在StackOverflow中创建新帖子