这是我正在运行的代码,基本上它只是要求用户键入数字,然后输入“done”后,计算它们的平均值:
average = 0
total = 0.0
count = 0
while True:
num = raw_input()
if num == "done":
break
try:
int(num)
total = total + num
count = count + 1
except:
print "bad data"
average = total / count
print total, count, average
我的问题是即使我输入一个整数,但是仍然会执行except块(即我输出“坏数据”),你能告诉我为什么会这样吗?
答案 0 :(得分:4)
int(num)
这会返回一个整数,但您不会将num重新分配给此整数。你需要做
num = int(num)
该行有效。
另请注意,您应该只打印异常,以了解更多信息:
try:
num_int = int(num)
total = total + num_int
count = count + 1
except ValueError as e:
print e
我们专门捕获ValueError
的原因是因为捕获您期望的异常(并处理特定异常的情况)是非常好的做法,而不是盲目地捕获所有内容。 / p>
答案 1 :(得分:2)
int(num)
未转换num
,您必须分配结果。将行更改为:
num = int(num)
你应该是金色的。
答案 2 :(得分:1)
int(num)
不会更改num
;它返回一个新值。如果您想要更改它,可以将该新值重新分配给num
。
num = int(num)
捕获特定错误并尽可能多地移出try
块以避免隐藏有用的异常信息也是一个好主意。
average = 0
total = 0.0
count = 0
while True:
num = raw_input()
if num == "done":
break
try:
num = int(num)
except ValueError:
print "bad data"
continue
total += num
count += 1
average = total / count
print total, count, average