2015-05-07 26 views
1

我有一个简单的Python程序,询问是或否的问题,并验证输入。 如果我运行这个Python shell,它运行良好。如果我输入无效字符,它会循环回到最上面。python程序在python shell与终端中表现不同

但是,如果我在终端窗口中运行此操作,并尝试输入无效字符,则会出现如下所示的错误。

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'在2和3之间改变行为。 – tzaman

回答

2

我可以清楚地看到在交互shell你在Python 3.2.3(背景)工作。但是我看不到从命令行(前台)运行的python版本。

在您的树莓派,从shell执行此命令:

python --version 

我期待在这里看到蟒蛇2.x的,因为input()行为的Python 2和Python 3之间是不同的,在某种程度上会导致你看到的行为。

您可能要添加一行

#!/usr/bin/env python3 

要将.py文件的顶部,然后在它chmod +x。之后,您应该可以直接执行它(./guipy01.py),并自动选择正确的python解释器。

3

看起来你的RPi正在使用Python 2; input函数在那里执行eval
input在Python 3等同于在Python 2 raw_input(见PEP-3111

理想情况下,你应该将RPI解释改变到Python 3,如果做不到这一点,你可以把它的版本无关,像这样:

try: 
    input = raw_input 
except NameError: 
    pass 
相关问题