【问题标题】:Python: except ValueError only for strings.Python:除了 ValueError 仅适用于字符串。
【发布时间】:2012-11-08 21:02:54
【问题描述】:

在 Python 3.3 中有没有一种方法可以只为字符串排除 ValueError ?如果我在 k 中输入一个字符串,我希望打印“无法将字符串转换为浮点数”,而不是“不能取负数的平方根”。

while True:
    try:
        k = float(input("Number? "))

....

    except ValueError:
        print ("Cannot take the square root of a negative number")
        break
    except ValueError:
        print ("Could not convert string to float")
        break

【问题讨论】:

  • 为什么除了ValueError之外还有2个?
  • 你没有在代码的任何地方取平方根,那么为什么第一个 except ValueError 根本就在那里?
  • 我是 Python 的初学者,所以我可能做得不对。我需要打印两条单独的消息,一条用于负数,一条用于字符串。除了一个例外,我不知道该怎么做。
  • 您也可以只打印异常。对于字符串,您会得到ValueError: count not convert string to float: 'fdsdfsd'。对于负数,您会得到ValueError: math domain error

标签: python except


【解决方案1】:

如果您想根据其来源处理不同的异常,最好将可能引发异常的不同代码部分分开。然后,您可以在引发异常的相应语句周围放置一个 try/except 块,例如:

while True:
    try:
        k = float(input("Number? "))
    except ValueError:
        print ("Could not convert string to float")
        break
    try:
        s = math.sqrt(k)
    except ValueError:
        print ("Cannot take the square root of a negative number")
        break

【讨论】:

  • 非常感谢。正是我需要的。
【解决方案2】:

简单,只需删除您的另一个except ValueError

while True:
    try:
        k = float(input("Number? "))

....

    except ValueError:
        print ("Could not convert string to float")
        break

如果要检查数字是否为负数,只需.. 检查是否为负数:

if k < 0:
   print("Number is negative!")

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2017-01-06
    相关资源
    最近更新 更多