try语句中的"except"(在while循环中)不起作用



我写了一个程序,它重复读取数字,直到用户输入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

最新更新