如何在Mac OS X中处理python的raw_input()的EOFError

5 投票
1 回答
7592 浏览
提问于 2025-04-15 18:52

我的Python程序里有两个调用了raw_input()的地方。

第一个raw_input()是用来让用户输入多行内容的。用户可以按下Ctrl+D(在Windows上是Ctrl+Z)来结束输入。

第二个raw_input()是用来让用户输入一个(y/n)类型的选择。

不幸的是(可能只在Mac OS X上?),如果在第一个raw_input()提示时用户按下了Ctrl+D,第二个raw_input()就会抛出一个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)'的选择。

1 个回答

6

在使用标准输入的时候,按下控制键加D(在Unix系统中)或者控制键加Z(在Windows系统中)来结束输入是很正常的。这种结束状态会一直保持下去,除非你在这期间关闭并重新打开输入。

撰写回答