1

我正在尝试修改下面的代码以检查用户的输入。如果输入是字符串,我想生成错误,请参阅函数choiceTest()。但这不起作用,我得到以下异常,你能帮助格雷厄姆吗

Choice your option:k
Traceback (most recent call last):
  File "C:\Users\Graham\bkup-workspaces\workspace\python-1\calculator.py", line 54, in <module>
    choice = menu()
  File "C:\Users\Graham\bkup-workspaces\workspace\python-1\calculator.py", line 18, in menu
    return input ("Choice your option:")    
  File "C:\Users\Graham\Desktop\letsussee\eclipse-java-helios-win32\eclipse\plugins\org.python.pydev_2.5.0.2012040618\PySrc\pydev_sitecustomize\sitecustomize.py", line 210, in input
    return eval(raw_input(prompt))
  File "<string>", line 1, in <module>
NameError: name 'k' is not defined

编码:

# calculator program

# NO CODE IS REALLY RUN HERE, IT IS ONLY TELLING US WHAT WE WILL DO LATER
# Here we will define our functions
# this prints the main menu, and prompts for a choice
def menu():
    #print what options you have

        print "Welcome to calculator.py"
        print "your options are:"
        print " "
        print "1) Addition"
        print "2) Subtraction"
        print "3) Multiplication"
        print "4) Division"
        print "5) Quit calculator.py"
        print " "
        return input ("Choice your option:")    
# this adds two numbers given

def add(a,b):
    print a, "+", b, "=", a + b

# this subtracts two numbers given
def sub(a,b):
    print b, "-", a, "=", b - a

# this multiplies two numbers given
def mul(a,b):
    print a, "*", b, "=", a * b

# this divides two numbers given
def div(a,b):
    print a, "/", b, "=", a / b

# decide if the choice is valid or not 
def choiceTest():


    isinstanceValue = isinstance(choice,int)
    instancevalueout = str(isinstanceValue)
    print "value is" + instancevalueout
    if not instancevalueout is "True":
       print " NOT AN INTEGER " + instancevalueout
       raise SystemExit

# NOW THE PROGRAM REALLY STARTS, AS CODE IS RUN
loop = 1
choice = 0
isinstanceValue = True
instancevalueout = ""

while loop == 1:
    choice = menu()
    choiceTest()
    if choice == 1:
        add(input("Add this: "),input("to this: "))
    elif choice == 2:
        sub(input("Subtract this: "),input("from this: "))
    elif choice == 3:
        mul(input("Multiply this: "),input("by this: "))
    elif choice == 4:
        div(input("Divide this: "),input("by this: "))
    elif choice == 5:
        loop = 0


print "Thankyou for using calculator.py!"

# NOW THE PROGRAM REALLY FINISHES
4

1 回答 1

2

您的问题是您正在使用input()which(在 Python 2.x 中)将输入解析为 Python 代码,这意味着只有当用户输入用引号括起来的字符串时,它才会按预期工作。

你可能想要raw_input()它给你一个字符串(就像input()在 3.x 中一样),并且更安全,因为它不允许执行任意代码。请注意,您可以尝试将其转换为数字,如果失败则捕获异常,告诉您用户尚未输入数字。

类型检查在 Python 中是不受欢迎的,因为它任意限制类——这是 Python 通常不会做的事情,因为它是鸭子类型的——最好尝试做你想做的事情,如果失败则捕获异常,优雅地处理它. 这被称为请求宽恕,而不是许可

于 2012-06-22T19:33:34.410 回答