尝试除错误检查

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)

【讨论】:

完美!太有道理了!由于这篇文章,学习了一些关于字符串比较的知识。谢谢! 很高兴它有帮助,这是任何人都可能犯的一个小错误。如果它对您有帮助,您可以在我的问题可用后点击我的问题旁边的勾号,让其他人知道您有一个很好的答案。

以上是关于尝试除错误检查的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 express-jwt 阻止访问除登录页面以外的 Angular 应用程序时出现问题

PEP8 不允许尝试除阻止 [重复]

测试人员必学的软件快速测试方法

从 Android Studio 中移除项目

“向量擦除迭代器超出范围”错误

SQL / Python尝试检查数据是不是已存在:将nvarchar转换为数据类型数字的算术溢出错误