Skip to main content
 首页 » 编程设计

python之如何通过 try/except 正确处理 KeyError 异常

2025年05月04日11虾米哥

为澄清而编辑:我正在尝试做一个学校练习,要求我构建接收一个元素和一个元组的函数,如果元素在元组中,它会反向返回它的位置,即:

findInTupleA (1 , (1,2,3,1) 

打印

[3, 0] 

但是如果元组中不存在该元素,则应发送一个 KeyError,提示“元素不在元组中”。

def findInTupleA(elem,tuplo): 
    lista_indices = [] 
    i = 0 
    while i < len(tuplo): 
        try: 
            if tuplo[i] == elem: 
                lista_indices.append(i) 
            i = i + 1 
        except KeyError: 
            return "element not in tuple" 
 
    if len(lista_indices)>=1: 
        return lista_indices[::-1] 
    else: 
        return lista_indices 

它仍然没有按预期工作,因为如果我给它元素 1 和元组 (2,3) 它返回一个空列表而不是键错误,而当我问的时候,reverse() 在第二个 if 上不起作用,不知道为什么。

附言如果您想对我可以改进代码的方式发表评论,那就太棒了,对于断言部分也是如此!

请您参考如下方法:

我觉得你误解了你的任务。我认为您不需要使用 try 和 except 来捕获函数内部的异常,而是您应该自己引发异常(并可能在函数外使用 try/except 来处理它)。

尝试更多类似的东西,看看它是否满足您的需要:

def findInTupleA(elem,tuplo): 
    lista_indices = []     
    i = 0 
    while i < len(tuplo): 
        if tuplo[i] == elem: 
            lista_indices.append(i) 
        i = i + 1 
 
    if len(lista_indices) >= 1: 
        return lista_indices 
    else: 
        raise IndexError("element not in tuple")