【问题标题】:How can I check error in 'if' condition to make decisions?如何检查“if”条件下的错误以做出决定?
【发布时间】:2020-06-18 17:45:36
【问题描述】:

假设,我有一本字典:

myList ={1:'One', 2:'two', 3:'three'}

我的代码是这样的:

if myList[4]:
   last = myList[4]
else:
   last = myList[3]

这会返回一个KeyError

我知道myList.get(4,'Something')。但我正在寻找别的东西。

有没有类似的东西:

if 'KeyError' myList[4]:
   last = myList[3]
else:
   last = myList[4]

https://realpython.com/python-keyerror/ 这里解释了这样的方法。我试过了。但是当myList[4] 不存在时,它仍然会引发KeyError。有人可以帮我找到我在这里缺少的东西吗?

myList={1:'one', 2:'two', 3:'three'}

if 'keyError' in myList[4]:
    last = myList['3']
else:
    last = myList['4']

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4

try...except 方法不适合我。它使我的代码冗长而缓慢。

【问题讨论】:

  • 这能回答你的问题吗? Handling key error in python
  • 我要为这些 cmets 投反对票:try...except 方法不适合我。它使我的代码又长又慢但我正在寻找别的东西。我不明白你想要什么以及你拒绝给你的 5 个答案的依据。
  • @NicolasGervais 你真的不明白,这就是为什么你没有意识到我为什么不接受这些答案。看,我标记的答案(为了您的学习目的)。顺便说一句,在 stackoverflow 上收集声誉不是我的愿景。

标签: python dictionary error-handling


【解决方案1】:

您可以使用 try except 块捕获它:

myList = {1:'one', 2:'two', 3:'three'}

try:
    last = myList[len(myList)]
except KeyError as e:
    print('KeyError: ', e)

【讨论】:

    【解决方案2】:

    您可以使用myList.keys() 获取字典键的列表,因此您可以这样做:

    if 4 in myList.keys():
        last = myList[4]
    else:
        last = myList[3]
    

    根据您正在做的事情,您可能还想知道您可以使用len(myList) 获取字典的长度,因此您正在做的事情(从1 开始的递增键)也可以完成更一般地是这样的:

    last = myList[len(myList)]
    

    我认为您应该将 myList 重命名为 myDict。它不是一个列表。它是一个“字典”,又名dict

    最后,尽量避免使用try-except 块。如果您要使用try-except,最好捕获特定错误(如您提到的KeyError)。要查看捕获 KeyError 的正确方法,请参阅 @jeanpierre-fisher 的答案(由 @ann-zen 帮助编辑)。

    【讨论】:

    • 太棒了!我应该早点想到。非常感谢。将您的答案标记为解决方案。但是,你能解释一下,if keyError in myList[4]: 有什么问题吗?我担心 myList/myDict 事实。不过还是谢谢。
    • 当你说"keyError" in myList[4]时,首先发生的是python“解释器”将评估myList[4],这会“引发”一个KeyError异常。由于引发了此异常,因此代码停止。它不会检查“keyError”是否是字典中的键(这就是该代码的作用)。要查看捕获 KeyError 的正确方法,请参阅 @jeanpierre-fisher 的答案(由 @ann-zen 帮助编辑)。
    【解决方案3】:

    您可以将其包装在 try 语句中并处理错误:

    try:
        last = myList[4]
    except KeyError:
        last = myList[3]
    

    【讨论】:

      【解决方案4】:

      如果您不想使用 try except 块(推荐的最佳做法),最简单的安全方法就是使用:

      last = myList[len(myList)]
      

      【讨论】:

      • 这是我的答案的一个确切的小节
      • 我在 34 分钟前写了这篇文章,而你在 8 分钟前复制了我的。看上面 这是我 34 分钟前的第一个答案
      • 哦,你是对的。对不起。真诚的歉意。我没有故意重复你的答案。我们独立编写了完全相同的代码行。我将撤消我的反对票。
      • 不用担心。我们可以删除否决票吗?谢谢你,JP
      • 抱歉,我以为我做到了,但似乎我无法撤消投票。为了弥补这一点,我投票选出了您对其他问题的其他 2 个不错的答案。
      猜你喜欢
      • 2021-09-29
      • 2015-04-09
      • 2021-11-20
      • 2016-09-24
      • 2023-02-06
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 2012-09-23
      相关资源
      最近更新 更多