Python 如何引发EOF错误?

Python 如何引发EOF错误?,python,exception-handling,eoferror,Python,Exception Handling,Eoferror,我是一个学习python的新手。请看下面的代码(来自Goodrich等人用Python编写的数据结构和算法) age=-1#一个最初无效的选择 虽然捕获了异常,但这意味着Python将继续循环,而不是让异常渗透到堆栈中,如果程序仍然未捕获,则最终结束程序。在except子句中不带参数调用raise只会再次引发相同的异常,相当于 except EOFError as exc: print("Unexpected error") raise exc 如果您实际上没有处理异常,则需要

我是一个学习python的新手。请看下面的代码(来自Goodrich等人用Python编写的数据结构和算法)

age=-1#一个最初无效的选择

虽然捕获了异常,但这意味着Python将继续循环,而不是让异常渗透到堆栈中,如果程序仍然未捕获,则最终结束程序。在
except
子句中不带参数调用
raise
只会再次引发相同的异常,相当于

except EOFError as exc:
    print("Unexpected error")
    raise exc
如果您实际上没有处理异常,则需要重新引发异常,而只是在(可能)其他人处理异常之前添加额外的日志记录

可以通过运行

$ python -c 'input()' < /dev/null
Traceback (most recent call last):
  File "<string>", line 1, in <module>
EOFError: EOF when reading a line
$python-c'input()'

因为所有从
/dev/null
读取的尝试看起来都像是从文件末尾读取的尝试。

您捕获了异常,这意味着Python将继续循环,而不是让异常渗透到堆栈中,如果程序仍然未捕获,则最终结束程序。在
except
子句中不带参数调用
raise
只会再次引发相同的异常,相当于

except EOFError as exc:
    print("Unexpected error")
    raise exc
如果您实际上没有处理异常,则需要重新引发异常,而只是在(可能)其他人处理异常之前添加额外的日志记录

可以通过运行

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

来自:

当读取
EOF
时,将引发
EOF

EOF
在输入流到达末尾时发送,或者如果它来自控制台,则表示用户在*NIX上按ctrl-D,或在Windows上按ctrl-Z

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

except EOFError:
    print('Done.')
    break
发件人:

当读取
EOF
时,将引发
EOF

EOF
在输入流到达末尾时发送,或者如果它来自控制台,则表示用户在*NIX上按ctrl-D,或在Windows上按ctrl-Z

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

except EOFError:
    print('Done.')
    break

如果你想筹集资金 以下代码将在Python中生成SyntaxError、EOF:

打印(“EOF现在在哪里?”)

这是一个测试,看看EOF发生在哪里。。。怀疑是4号线的EOF 打印(“你好,世界!”


不过,我不确定这是否是您所说的“引发错误”的意思。如果您希望引发错误,请在StackOverflow中创建一个新帖子 以下代码将在Python中生成SyntaxError、EOF:

打印(“EOF现在在哪里?”)

这是一个查看EOF发生位置的测试…怀疑是EOF 4号线 打印(“你好,世界!”



我不确定这是否是你所说的“引发错误”的意思。在StackOverflow中创建一个新帖子

很抱歉,但是当我输入$python-c'input()时“EOFError
;不确定如何得到
ValueError
。您是否复制并粘贴了代码,并以$Python-c'input()的形式输入了输入了该代码?” $>代码>)是从shell运行的,而不是从解释器内部运行的。<代码> $>代码>只是表示shell提示符的约定。“EOFError
;不确定如何得到
ValueError
。您是否复制并粘贴了代码,并以$Python-c'input()的形式输入了输入了该代码?” $< /代码>)是指从shell运行,而不是从解释器内部运行。
$
只是指示shell提示符的一种约定。您能给我一个如何捕获EOFError的示例吗?应该是什么输入?除了EOFError
之外的
块捕获
EOFError
。如果要测试它,只需按*NIX上的ctrl-D键,或者在Windows上按ctrl-Z,然后输入。嗯…我正在使用mac,command-D或Z无法正常工作。command-D的结果:以年为单位输入您的年龄:这是一个无效的年龄规范。以年为单位输入您的年龄:command-Z的结果:以年为单位输入您的年龄:这是一个无效的年龄规范。您能给我演示一个如何捕获EOFErro的示例吗r?应该是什么输入?除了EOFError
之外的
块捕获了
EOFError
。如果您想测试它,只需在*NIX上按ctrl-D,或在Windows上按ctrl-Z,然后输入。嗯…我使用mac,command-D或Z无法正常工作。command-D的结果:输入您的年龄(以年为单位):这是一个无效的年龄规范。请在y中输入您的年龄ears:command-Z的结果:以年为单位输入您的年龄:这是一个无效的年龄规范。