我是学习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何时升高。
我无法理解“重新引发此例外”的含义
这本书说,“如果控制台输入失败,则对输入的调用将引发EOFError。”同样,我不知道什么是控制台输入以及什么时候控制台输入失败。
我尝试了几种提高EOFError的方法,但是每次尝试都只有ValueError。有人可以给我一些想法吗?
谢谢。
答案 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)
读取
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中创建新帖子