我写了一个程序,它重复读取数字,直到用户输入CCD_ 1。如果用户输入的不是数字,请使用try-and-except检测错误并打印错误消息,然后跳到下一个数字。
问题是代码永远不会到达代码的except
部分(用户应该会因为没有输入任何内容或输入无效字符(任何不是'done'
或数字的内容(而收到错误(。我做错了什么?
numbers=(input("Enter a number or 'done' to quit: "))
count=1
total_num=int(numbers)
while True:
numbers=(input("Enter another number or 'done' to quit: "))
try:
if (numbers.isalpha() and numbers=='done'): #elif numbers.isalpha() and numbers=='done':
break
elif numbers.isdigit():
numbers=int(numbers)
total_num+=int(numbers)
count+=1
except:
print('Valid a number or done to quit:' )
print('sum is', total_num)
print('count is', count)
print('average is', int(total_num/count))
您误解了try..except
块的要点。您不需要检查输入isdigit
,因为这可以防止抛出任何错误。只需尝试将输入转换为int
,如果失败,您将使用except
。在那里,您可以检查输入是否为== "done"
,并爆发:
while True:
numbers = input("Enter another number or 'done' to quit: ")
try:
numbers = int(numbers)
total_num += numbers
count += 1
except ValueError:
if numbers == "done": break
print('Valid a number or done to quit:' )
注意,我将except
子句限定为只捕获"done"
0s,因为捕获所有错误是一种糟糕的做法——这可能会隐藏代码的实际问题,并禁用使用Ctrl+C
中断程序的能力
没有任何明显破坏代码的内容,因此永远不会执行Except语句。
您可以使用与Except:相同的东西放置else语句
numbers=(input("Enter a number or 'done' to quit: "))
count=1
total_num=int(numbers)
while True:
numbers=(input("Enter another number or 'done' to quit: "))
try:
if (numbers.isalpha() and numbers=='done'): #elif numbers.isalpha() and numbers=='done':
break
elif numbers.isdigit():
numbers=int(numbers)
total_num+=int(numbers)
count+=1
else:
print('Valid a number or done to quit:' )
except:
print('Valid a number or done to quit:' )
print('sum is', total_num)
print('count is', count)
print('average is', int(total_num/count))
除非你们发现一些输入破坏了你们的代码,否则我建议删除它,只使用if elif else