【问题标题】:Python Try Except with Simple Numerical ConditionsPython 尝试使用简单数值条件除外
【发布时间】:2018-02-26 06:04:25
【问题描述】:

此 Python 代码允许用户输入给出字母输出的数字等级,但它也尝试考虑字符串用户输入或超出 0.0 到 1.0 范围的数字用户输入,通过提供错误消息作为输出。

score = input("Enter Score: ")

try:
    sr = float(score)
    sr <= 1.0
    sr >= 0.0
except:
    print("Number entered must be between 0.0 and 1.0")
    quit()

if sr >=0.9:
    print ("A")
elif sr >=0.8:
    print ("B")
elif sr >=0.7:
    print ("C")
elif sr >=0.6:
    print ("D")
else:
    print ("F")

我遇到的问题是,当用户输入为 1.2 时,我希望得到我指定的错误输出,“输入的数字必须介于 0.0 和 1.0 之间”。但相反,我得到了“A”的输出。

我知道我可以使用 if 语句来获取所需的错误消息,而不是使用“try except”结构,但我只是想了解为什么 try-except 代码不能按我想要的方式工作.

谢谢大家:)。

附:第一次发帖,如果我在堆栈溢出问题礼仪或你有什么方面搞砸了,请道歉。

【问题讨论】:

  • try/except 语句用于捕获异常。您应该使用ifelse 来检查一个数字是否在一定范围内。
  • sr &lt;= 1.0 返回一个布尔值,它不会引发异常。但是,您可以使用此当前结构做的是使用 assert sr &lt;= 1.0,这将在返回非真实值时引发 AssertionError — 这可以被您的 except 子句捕获。

标签: python numeric try-except


【解决方案1】:

这就是你所期待的......

score = input("Enter Score: ")

try:
    sr = float(score)
    assert sr <= 1.0    #needs an assert keyword
    assert sr >= 0.0    #needs an assert keyword
except:
    print("Number entered must be between 0.0 and 1.0")
    quit()

如果您不编写断言sr &lt;= 1.0,它只会尝试计算该值并将其丢弃,因为您没有将其分配给任何东西。

或者,您可以使用 if 语句并在 if 条件不匹配时退出,就像这样。

score = input("Enter Score: ")

sr = float(score)

if sr > 1.0 or sr < 0.0:    
    print("Number entered must be between 0.0 and 1.0")
    quit()

【讨论】:

    【解决方案2】:

    线条:

    sr <= 1.0
    sr >= 0.0
    

    计算两个布尔值,然后不要使用这些值。我认为你想要的是:

    try:
        sr = float(score)
        assert(sr <= 1.0)
        assert(sr >= 0.0)
    except:
        print("Number entered must be between 0.0 and 1.0")
        quit()
    

    当参数的值为 false 时,Assert 会引发 AssertionError。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2021-03-07
      • 1970-01-01
      • 2016-10-02
      • 2013-06-17
      • 2012-03-12
      • 1970-01-01
      相关资源
      最近更新 更多