Python程序在Python Shell和终端中的表现不同。

3

我有一个简单的Python程序,提出一个是或否的问题并验证输入。如果我在Python shell中运行它,那么它会正常运行。如果我输入无效字符,它会循环回while顶部。

然而,如果我在终端窗口中运行它并尝试输入无效字符,则会产生如下错误。

endProgram = 0
while endProgram != 1:
    userInput = input("Yes or No? ");
    userInput = userInput.lower();

    while userInput not in ['yes', 'no']:
        print("Try again.")
        break

    endProgram = userInput == 'no'

enter image description here


2
你们两个都在使用相同的Python版本吗?input函数在Python 2和3之间的行为是不同的。 - tzaman
2个回答

4
看起来你的 RPi 正在使用 Python 2;input 函数在那里执行了一个 eval
Python 3 中的 input 等同于 Python 2 中的 raw_input。(请参见PEP-3111
理想情况下,你应该将 RPi 解释器更改为 Python 3。如果无法更改,则可以这样使其版本无关:
try:
    input = raw_input
except NameError:
    pass

3

我在交互式shell中可以清楚地看到你正在使用Python 3.2.3(背景)。但是我无法从命令行(前景)中看到你正在运行的Python版本。

在树莓派上,从Shell中执行以下命令:

python --version

我希望在这里看到Python 2.x,因为input()在Python 2和Python 3之间的行为不同,会导致你所看到的行为。您可能需要添加一行类似于:
#!/usr/bin/env python3

将以下代码添加到你的.py文件的最上方,然后执行chmod +x命令。之后,你可以直接执行该文件(./guipy01.py),正确的Python解释器将自动选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接