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

时间:2017-01-05 17:09:24

标签: python exception assert

编辑澄清:我正在尝试进行学校练习,这需要我构建接收元素和元组的函数,如果元素在元组中,它会以相反的方式返回其位置,即:

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工作,不知道为什么。

P.S。如果您想评论我可以改进代码的方法,它会很棒,对于断言部分也是如此!

3 个答案:

答案 0 :(得分:4)

听起来你好像误解了你的任务。我不认为您需要使用tryexcept来捕获函数内部的异常,而是您应该自己提升异常(并且可能使用{{1在处理它的函数之外的/ try。)

尝试更类似的内容,看看它是否符合您的要求:

except

答案 1 :(得分:3)

如何检查元素index是否在元组中。如果该元素不存在,则返回element not in tuple异常ValueError,如下所示:

def in_tuple(elem, tuplo):

    try:
        return tuplo.index(elem)
    except ValueError:
        return 'element not in tuple'

print in_tuple(1, (2, 3))

答案 2 :(得分:2)

我认为你的问题在于缩进。我认为你的目标是......

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

    if len(lista_indices)>=1:
        return lista_indices[::-1]
    else:
        return lista_indices