typeerror异常无效

时间:2016-07-29 18:30:18

标签: python exception typeerror

我试图完成一项练习,要求我在Python中使用TypeError异常来考虑需要整数时的字符串。示例很简单,我向用户询问两个数字然后添加它们。我想使用try块来处理用户意外放入字符串而不是int。 我得到的是一个ValueError回溯,说明基数为10。

以下是代码:

print ("Give me two numbers, and I'll add them.")
print ("Enter 'q' to quit.")

while True:

    try:
        num1 = input("\nEnter first number: ")
        if num1 == 'q':
            break
    except TypeError:
        print ("Please enter a number not a letter.")
    try:    
        num2 = input("\nEnter second number: ")
        if num2 == 'q':
            break
    except TypeError:
        print ("Please enter a number not a letter.")

    sum = int(num1) + int(num2) 
    print ("The sum of your two numbers is: " + str(sum))

以下是错误消息:

Traceback (most recent call last):
  File "chapt10 - files and exceptions.py", line 212, in <module>
    sum = int(num1) + int(num2) 
ValueError: invalid literal for int() with base 10: 'd'

1 个答案:

答案 0 :(得分:0)

很棒,你已经有try/except块,但问题是构造没有被正确使用。如果输入的是字母而不是数字,则为ValueError而不是TypeError。这就是为什么在输入信件时你的代码会引发ValueError的原因;该异常类未被处理。

更重要的是,try块实际上应该包含可能引发错误的操作

print ("Give me two numbers, and I'll add them.")
print ("Enter 'q' to quit.")

while True:
    num1 = input("\nEnter first number: ")
    num2 = input("\nEnter second number: ")
    if num1 == 'q' or num2 == 'q':
        break
    try:
        num1 = int(num1) # casting to int will likely raise an error
        num2 = int(num2)
    except ValueError:
        print ("One or both of the entries is not a number. Please try again")
        continue
    total = num1 + num2
    print ("The sum of your two numbers is: " + str(total))

另外,使用sum作为变量名称并不是一个好主意,因为sum是内置的Python。