Python 3.x 为什么它不能捕获索引错误?

Python 3.x 为什么它不能捕获索引错误?,python-3.x,Python 3.x,上述命令正确执行并打印 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("ValueEr

上述命令正确执行并打印

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
输出:

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")
终于完成了
例外情况
终于进去了

当键不存在时,字典会抛出
KeyError
not
indexer
,因此
dict\u项
try块不会捕获任何内容并打印
最终完成的操作
,然后外部的
try
会捕获裸表中的
KeyError
Exception
是大多数异常的基类,因此您可以看到它的类型和值,然后final
finally
在finally
内部打印
,除了:
不是很有用。将异常捕获为打印其类型以查看错误:

Finally done
Exception
inside finally
输出:

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")
终于完成了
例外情况
终于进去了

当键不存在时,字典会抛出
KeyError
not
indexer
,因此
dict\u项
try块不会捕获任何内容并打印
最终完成的操作
,然后外部的
try
会捕获裸表中的
KeyError
Exception
是大多数异常的基类,因此您可以看到它的类型和值,然后final
finally
在finally内部打印

我认为它会抛出
KeyError
而不是
Indexer
这是一个字典,你会得到KeyError而不是Indexer我想它会抛出
KeyError
而不是
Indexer
这是一本字典,你会得到KeyError而不是Indexer