尝试/例外,不返回例外

时间:2019-04-04 00:18:43

标签: python

我正在尝试使用try和一些代码。我已经能够使代码的try部分正常工作,但其余部分无法正常工作。我正在使用ValueError,但是尝试了NameError和IndexError。 我想念什么?

string1 = input("Enter a string:")
d = dict(enumerate(string1))
try:
    enter_value = input("Enter a value(should be in the initial string1):")
    if enter_value in d.values():
        print("Value found.")
except ValueError:
    print("Value not found.")

当enter_value在dict()中时,我编写的代码会产生正确的响应。但显示: “输入值(应在初始string1中:d)”

当它不在dict()中时

4 个答案:

答案 0 :(得分:3)

使用代码:

string1 = input("Enter a string:")
d = dict(enumerate(string1))

enter_value = input("Enter a value(should be in the initial string1):")
if enter_value in d.values():
     print("Value found.")
else:
    print("value not found.")

该错误的作用是,如果值不正确,但是您想查看该值是否在字符串中,则会产生一个错误,因此只需检查一下然后发出响应即可。

答案 1 :(得分:1)

您的代码执行正常。您正在询问enter_value是否在列表d.values()中,但是如果不是,它不会引发错误,而是只是中断if语句,因为您没有索引或任何棘手的事情。您可以使用else:块来捕获此逻辑,如下所示:

string1 = input("Enter a string:")
d = dict(enumerate(string1))
try:
    enter_value = input("Enter a value(should be in the initial string1):")
    if enter_value in d.values():
        print("Value found.")
    else:
        print("Value not found.")
except:
    print("There was an error!!")

尽管使用此特定代码,我不怀疑会捕获任何错误(至少我可以想到,我敢肯定,如果您尽了全力,可以通过XD破坏它)

答案 2 :(得分:1)

如前所述,if enter_value in d.values():将返回true或false,但不会引发异常,因此请不要尝试,因为这是不必要的。

也可以不用检查字典,而只需检查字符串中是否存在该值

string1 = input("Enter a string:")
enter_value = input("Enter a value(should be in the initial string1):")
if enter_value in string1:
    print("Value found.")
else:
    print("Value not found.")

如果您想了解try / except,请检查此快速示例

try:
    1 / 0
except ZeroDivisionError:
    print('error, unable to divide by 0')

答案 3 :(得分:1)

您可以执行您想做的事情,像这样:

string1 = input("Enter a string:")
d = dict(enumerate(string1))
try:
    enter_value = input("Enter a value(should be in the initial string1):")
    if enter_value not in d.values():
        raise KeyError('Value not found.')
    print(f"Value found.")
except KeyError as e:
    print(e)

我注意到其他答案指出了执行此操作的其他方法,但是如果您要使用异常,这就是方法。

通常,您在字典中查找 value 时不会引发异常,而丢失键通常会更多。像这样:

d = {'a': 1, 'b': 2, 'c': 3}
try:
    _ = d['d']
except KeyError:
    print('Key not found.')