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("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
为什么没有捕捉到索引错误有什么我遗漏的吗?
解决方案
裸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 。IndexError
dict_items
Finally done
try
KeyError
Exception
finally
inside finally
推荐阅读
- c++ - 具有多个输出的内联汇编块
- python - 我正在尝试制作康威生活游戏,但发生了一些事情
- batch-file - 调用一个变量,该变量的值是另一个变量的名称
- javascript - 如何对新数组进行分组?
- java - 具有多个字段的MongoDB查询
- python - Simpy:使用匹配时间存储 put/get
- mysql - MySQL中的递归CTE丢失日期
- node.js - $geoNear 仅在我给出 maxDistance = 100 * 1000 时给出结果;
- chronicle-map - 在 Chronicle Map 中存储的值中查看垃圾值
- bootstrap-modal - 关闭并重新显示后引导模式不显示 PDF 文档