5

我的 python 程序有两个调用raw_input()

第一个raw_input()是从用户那里获取多行输入。用户可以发出 Ctrl+D(在 Windows 中为 Ctrl+Z)来结束输入。

其次raw_input()应该使用(y / n)类型提示从用户那里获取另一个输入。

不幸的是(仅在 Mac OS X 中?),当 stdin 在第一次提示时终止(使用 Ctrl+D)时raw_input()会引发第二次。EOFErrorraw_input()

请参阅下面的示例代码以获取更多说明-

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

我怎样才能让第二个提示不要 raise EOFError。请帮忙!

编辑:

我已经编辑了我的问题以保持简单。

我在 Linux 系统中运行了上面的代码,它没有任何问题。也就是说,在第二个 raw_input() 处提示用户接收“(y/N)”选择。

4

1 回答 1

6

当标准输入终止时(在 Unix 派生系统中通过点击 control-D ——我认为它在 Windows 中是 control-Z),这是很正常的,此后它保持终止状态(除非您同时关闭并重新打开它,当然)。

于 2010-02-04T06:57:26.370 回答