在python3中除外

2024-10-01 11:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我挣扎了好几个小时,终于弄明白了。当然,这对我来说显然是痛苦的,但也许有一天其他人会被困在同一个地方,所以我想我会问和答。当然,任何更正或解释都是受欢迎的。在

节略代码:

bearNames = {
    'grizzly' : 'GZ',
    'brown' : 'BR',
}

bearAttributes = {
    'GZ' : 'huge and light brown',
    'BR' : 'medium and dark brown',
}

print("Type the name of a bear:")
userBear = input("Bear: ")

beartruth = True
while beartruth == True:

    try:
        print("Abbreviation is ", bearNames[userBear])
        print("Attributes are ", bearAttributes[bearNames[userBear]])
        print("beartruth: ", beartruth)
        beartruth = False
        print("beartruth: ", beartruth)

    except:
        print("Something went wrong - did you not type a bear name?")
        print("beartruth: ", beartruth)

问题-输入不是熊的东西会永远循环“除了”部分。我希望发生的事情应该是非常明显的-如果用户输入了不在bearNames中的内容,它应该触发except,打印错误并返回尝试。在


Tags: andnamebrtrue地方bearprint小时
2条回答

我最终找到的答案是将input()放入while中。为了解释。。。在

编写的代码首先要求用户输入,然后开始while。如果用户输入“grizzly”,则尝试成功,bearTruth设置为false,从而中断循环。(也许中断语句在这里会起作用,但我还没有得到足够的break语句:)

如果用户输入的内容没有完成,就输入。它失败了,但是我们已经在while中,用户输入已经设置好了。因此,使用相同的userBear值再次尝试,再次失败,并永远循环。在

也许有一天像我这样愚蠢的人会遇到这个问题并找到解决办法。在

因为你要求更正或解释。在

从你的代码中

try:
    print("Abbreviation is ", bearNames[userBear])
    print("Attributes are ", bearAttributes[bearNames[userBear]])
    print("beartruth: ", beartruth)
    beartruth = False
    print("beartruth: ", beartruth)

except:
    print("Something went wrong - did you not type a bear name?")
    print("beartruth: ", beartruth)

您可以对异常进行具体说明(我建议这样做),以确保隔离出您可能预期的错误。在

^{2}$

这样做的话,你知道熊其实不是一只。而且只有当Bear是一个真正的Bear时,您才能进入else块来做其他事情。在

如果在最后4行中出错,则引发的异常将不同,并且不会被泛型隐藏

except:

块,这也会隐藏其他错误,但您会认为这是来自用户的错误输入。在

因为您处于while循环中,您可以选择执行以下操作:

try:
    print("Abbreviation is ", bearNames[userBear])
except KeyError:
    print("Something went wrong - did you not type a bear name?")
    print("beartruth: ", beartruth)
    continue  # go back to the beginning of the loop

# There was no error and continue wasn't hit, the Bear is a bear
print("Attributes are ", bearAttributes[bearNames[userBear]])
print("beartruth: ", beartruth)
beartruth = False
print("beartruth: ", beartruth)

相关问题 更多 >