python中的Try-Except块

时间:2015-06-19 03:46:41

标签: python exception

这是我正在运行的代码,基本上它只是要求用户键入数字,然后输入“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块(即我输出“坏数据”),你能告诉我为什么会这样吗?

3 个答案:

答案 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