我试图完成一项练习,要求我在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'
答案 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。