当我输入其中一个数字的字母时,我收到错误:
Traceback (most recent call last):
File "/Users/rodchar/Documents/Hello World Katie/testing.py", line 7, in <module>
x = input("What is your first number?")
File "<string>", line 1, in <module>
NameError: name 's' is not defined
x = 0
y = 0
isValid = False
while isValid == False:
x = input("What is your first number?")
try:
float(x)
isValid = True
except:
isValid = False
y = input("What is your second number?")
try:
float(y)
isValid = True
except:
isValid = False
print "The answer is: %s" % (x+y)
答案 0 :(得分:3)
input()
尝试将其输入评估为python表达式...
因此,它会尝试评估s
并查找变量s
。
在这种情况下,您可以将x
设置为字符串:
x = raw_input("What is your first number?")
然后将转换浮动到try
块
注意:这仅适用于python 2,因为python 3更改input()
函数以将输入作为字符串。
答案 1 :(得分:3)
首先,至少在Python 2.7中,input()
不是您想要获取用户输入的内容。你真的想要raw_input()
。 (这确实令人困惑,并已在Python 3中得到修复。)
其次,正如@jamylak所说,给出异常的语句不在try / catch块中。
第三,当您使用except:
捕获异常时,您应该捕获特定类型的异常(except ValueError:
)而不是任何和所有异常。捕获所有异常是不好的,因为它掩盖了引发您没有预料到的异常的错误。
更好的方法是:
x
和获取y
的代码非常相似。而不是两次写同一个东西,写一次并重复使用它。在Python 2.7上测试:
def get_float_from_user (prompt):
while True:
try:
user_input = float(raw_input(prompt))
return user_input
except ValueError:
print ("Not a floating point number. Please try again.")
x = get_float_from_user("Enter x.")
y = get_float_from_user("Enter y.")
print (x+y)
答案 2 :(得分:1)