首页 > 解决方案 > 为什么它没有捕获索引错误?

问题描述

def dict_items(dict1):
    try:
        d2={}
        for k in dict1.keys():
            d2[k+1]=dict1[k]+k
            dict1[k]=d2[k]       
    except IndexError:
        print("IndexError")
    except ValueError:
        print("ValueError")
    finally:
        print("Finally done")

try:
    dict_items({1:1,2:22,3:33})
    print("function call done")
except:
    print("Exception")
finally:
    print("inside finally")

以上正确执行并打印

Finally done
Exception
inside finally

为什么没有捕捉到索引错误有什么我遗漏的吗?

标签: python-3.x

解决方案


except:的不是很有用。将异常捕获为打印其类型以查看您的错误:

def dict_items(dict1):
    try:
        d2={}
        for k in dict1.keys():
            d2[k+1]=dict1[k]+k
            dict1[k]=d2[k]       
    except IndexError:
        print("IndexError")
    except ValueError:
        print("ValueError")
    finally:
        print("Finally done")

try:
    dict_items({1:1,2:22,3:33})
    print("function call done")
except Exception as e:
    print("Exception",type(e))
finally:
    print("inside finally")

输出:

Finally done
Exception <class 'KeyError'>
inside finally

当键不存在时,字典不会抛出KeyError异常,因此try 块什么都不捕获并打印,然后外部捕获裸露的 except 。 是大多数异常的基类,因此您可以看到它具有什么类型和值,然后是最终的prints 。IndexErrordict_itemsFinally donetryKeyErrorExceptionfinallyinside finally


推荐阅读