尝试除错误检查
Posted
技术标签:
【中文标题】尝试除错误检查【英文标题】:Try except bug check 【发布时间】:2015-12-29 04:16:05 【问题描述】:我正在上某门在线课程,并使用此代码完成了作业,但我仍然可以通过某些输入引发错误,我不明白为什么。我问过课程导师(使用伪代码),他们说我的 try/except 语句有问题。
程序应该一遍又一遍地提示用户输入一个数字,如果输入了非数字的内容,则返回错误,但字符串“done”除外,在这种情况下,它将返回最大值和最小值输入的所有数字。
这是程序:
largest = None
smallest = None
while True:
num = input("Enter a number: ")
if num == 'done': break
try:
float(num)
except:
print("Invalid input")
continue
if largest is None:
largest = num
elif largest < num:
largest = num
if smallest is None:
smallest = num
elif smallest > num:
smallest = num
print("Maximum is", largest)
print("Minimum is", smallest)
如果输入以下值作为输入1 2 3 pk 27 -37 done
,则输出为Max: 3, Min -37.
这让我发疯。我知道为什么会这样。
【问题讨论】:
很难重现这个,你是如何输入非数字值的? 条目为 1、2、3、pk、27、-37。任何字符串都可以代替 'pk' 忘记在输入中添加“完成” 顺便说一句,使用except ValueError
比使用“裸”except
更好。
【参考方案1】:
您将输入转换为浮点数,但不保留它以供以后检查。
所以稍后在 except 块之后,Python 正在进行字符串比较,并将字符串 "3"
与字符串 "27"
进行比较,并且由于 '3'
比 '2'
“大”,它认为 "3"
大于“27
”,很像"b"
大于"aaabbbbzzz"
。
要修复它,请更改此:
float(num)
到这里:
num = float(num)
【讨论】:
完美!太有道理了!由于这篇文章,学习了一些关于字符串比较的知识。谢谢! 很高兴它有帮助,这是任何人都可能犯的一个小错误。如果它对您有帮助,您可以在我的问题可用后点击我的问题旁边的勾号,让其他人知道您有一个很好的答案。以上是关于尝试除错误检查的主要内容,如果未能解决你的问题,请参考以下文章