如何使特定字符串在 try-except 块中工作?

How to make a specific string work in a try-except block?

我不想让用户能够输入数字以外的任何内容作为“number”变量的输入,字符串“done”除外。

是否有可能以某种方式对 try-except 块的规则进行例外处理,并使用户能够编写“完成”来中断 while 循环,同时仍保持当前功能?还是我应该尝试一些不同的东西来让它发挥作用?

while number != "done":
    try:
        number = float(input("Enter a number: ")) #The user should be able to write "done" here as well
    except ValueError:
        print("not a number!")
        continue

将两部分分开:询问用户并验证它是否是 done,然后在 try/except

中解析它
number = None
while True:
    number = input("Enter a number: ") 
    if number == "done":
        break

    try:
        number = float(number)
    except ValueError:
        print("not a number!")
        continue

    print("Nice number", number)

检查报错信息是否包含'done':

while True:
    try:
        number = float(input("Enter a number: "))
    except ValueError as e:
        if "'done'" in str(e):
            break
        print("not a number!")
        continue

同样在这种情况下 continue 在这里不是必需的(至少对于这个例子)所以它可以被删除

也许之后将数字转换为浮点数。您可以检查数字是否不等于 done,然后将数字转换为 float

number = 0
while number != "done":
    try:
        number = input("Enter a number: ") #The user should be able to write "done" here as well
        
        if number=="done":
            continue 
        else: 
            number = float(number )
    except ValueError:
        print("not a number!")
        continue
while True:
    try:
        user_input = input("Enter a number: ")
        if user_input == "done":
            break
        number = float(user_input)
    except ValueError:
        print("not a number!")
        continue

检查输入是否为 'done'

后,您可以将输入转换为浮点数

与其尝试对规则进行例外处理,不如做一些类似的事情,

while True:
    try:
        number=input("Enter a number: ")
        number=float(number)
    except:
        if number=="done":
            break
        else:
            print("Not a number")

有多种方法可以解决这种情况。 我想到的第一个是做:

while True:
    user_input = input("Enter a number: ")
    if user_input == "done":
        break
    else:
        try:
            number = float(user_input)
        except ValueError:
           print("not a number!")
           continue