我的python程序有两个对raw_input()的调用
第一个raw_input()是从用户获取多行输入.用户可以在输入结束时发出Ctrl D(在Windows中为Ctrl Z).
第二个raw_input()应该使用带有(y / n)类型提示的用户的另一个输入.
不幸的是(仅在Mac OS X中?),第二个raw_input()在第一个raw_input()提示符下终止stdin(使用Ctrl D)时引发EOFError.
有关更多说明,请参阅下面的示例代码 –
mailBody = ''
signature = 'Later!'
print 'Compose your mail:'
while True:
try:
# Hit ^D after entering some text
mailBody+= raw_input()
mailBody+='\n'
except EOFError:
break
# This raw_input() throws EOFError too. Because, stdin is terminated for the session
# when EOF (^D) is issues at first raw_input() method (Where as, it doesn't raise EOFError in Linux)
opt = raw_input("Do you want to add signature to your mail? (y/N): ").lower()
print '-'*10+'Your Mail'
if opt == 'y':
print mailBody+"\n"+signature
else:
print mailBody
print '-'*19
程序输出:
-1- abhinay@MacBook code/py % python prompt.py
Compose your mail:
hello there!
how is everybody?
Do you want to add signature to your mail? (y/N): Traceback (most recent call last):
File "prompt.py", line 11, in <module>
opt = raw_input("Do you want to add signature to your mail? (y/N): ").lower()
EOFError
如何在第二次提示不提出EOFError.请帮忙!
编辑:
我编辑了我的问题以保持简单.
我在Linux系统中运行了上面的代码,它没有任何问题.也就是说,第二个raw_input()提示用户接收'(y / N)’选项.
解决方法:
当标准输入终止时(通过命中控制-D,在Unix衍生系统中 – 我认为它是Windows中的控制-Z),这很正常,此后它会保持终止(除非你在此期间关闭并重新打开它,当然).