捕捉不同的类型错误
Catching different TypeErrors
我有一本字典,里面有三种不同的键值对。这些值是三种形状之一:字典、null 或整数,例如:
dic = {"range" : {"val": 1, "size": 2},
"length" : {"val": 5, "radius": 1},
"power": null,
"current": 5}
我正在使用一个 try-except 块,字典值为默认值,并且想分别捕获 null 和 integer 的 TypeError。对于 null 值,它给出“TypeError:'NoneType' object is not subscriptable”,对于整数,它给出“TypeError:'int' object is not subscriptable”。如何在不同的异常中捕获这些错误?我正在遍历字典中感兴趣的键,下面是我当前正在做的一个例子,但是它捕获了两个错误,因为它们都是 TypeError:
for kw in list_of_keys:
try:
val_test = dic[kw]['val']
except TypeError:
val_test = dic[kw]
我想捕获类似于以下内容的错误:
for kw in list_of_keys:
try:
val_test = dic[kw]['val']
except TypeError: 'int' object is not subscriptable:
val_test = dic[kw]
except TypeError: 'NoneType' object is not subscriptable:
val_test = "Not implemented / Not given yet"
感谢您的帮助!
例外是为了特殊的结果。在这里,None
或 int
值似乎与 dict
值一样有效,因此您应该先查看 dic[kw]
,然后再假设它是 dict
。
for kw in list_of_keys:
v = dic[kw]
if v is None:
val_test = "Not implemented / Not given yet"
else:
try:
val_test = v['val']
except TypeError:
val_test = v
一旦确定 v
是否为 None
, 然后 您可以尝试对其进行索引并假设它是 int
在 TypeError
.
您可以使用 type()
关键字来检查变量是 Integer
还是 NoneType
并相应地使用 try-except。
否则检查变量是否可订阅:
from collections.abc import Iterable
if isinstance(theElement, Iterable):
# iterable
else:
# not iterable
您还可以使用 hasattr(myObj, '__getitem__')
通过 __getitem__
方法检查对象,例如 dict。
您可以使用 .get()
来检查 None
或 boolen
和 isinstance
方法来检查它是否是 integer
。
for kw in list_of_keys:
val = dic.get(kw)
if not val:
val = "NoneType Error"
elif isinstance(val,int):
val = "Integer Error"
else:
val=val['val']
我有一本字典,里面有三种不同的键值对。这些值是三种形状之一:字典、null 或整数,例如:
dic = {"range" : {"val": 1, "size": 2},
"length" : {"val": 5, "radius": 1},
"power": null,
"current": 5}
我正在使用一个 try-except 块,字典值为默认值,并且想分别捕获 null 和 integer 的 TypeError。对于 null 值,它给出“TypeError:'NoneType' object is not subscriptable”,对于整数,它给出“TypeError:'int' object is not subscriptable”。如何在不同的异常中捕获这些错误?我正在遍历字典中感兴趣的键,下面是我当前正在做的一个例子,但是它捕获了两个错误,因为它们都是 TypeError:
for kw in list_of_keys:
try:
val_test = dic[kw]['val']
except TypeError:
val_test = dic[kw]
我想捕获类似于以下内容的错误:
for kw in list_of_keys:
try:
val_test = dic[kw]['val']
except TypeError: 'int' object is not subscriptable:
val_test = dic[kw]
except TypeError: 'NoneType' object is not subscriptable:
val_test = "Not implemented / Not given yet"
感谢您的帮助!
例外是为了特殊的结果。在这里,None
或 int
值似乎与 dict
值一样有效,因此您应该先查看 dic[kw]
,然后再假设它是 dict
。
for kw in list_of_keys:
v = dic[kw]
if v is None:
val_test = "Not implemented / Not given yet"
else:
try:
val_test = v['val']
except TypeError:
val_test = v
一旦确定 v
是否为 None
, 然后 您可以尝试对其进行索引并假设它是 int
在 TypeError
.
您可以使用 type()
关键字来检查变量是 Integer
还是 NoneType
并相应地使用 try-except。
否则检查变量是否可订阅:
from collections.abc import Iterable
if isinstance(theElement, Iterable):
# iterable
else:
# not iterable
您还可以使用 hasattr(myObj, '__getitem__')
通过 __getitem__
方法检查对象,例如 dict。
您可以使用 .get()
来检查 None
或 boolen
和 isinstance
方法来检查它是否是 integer
。
for kw in list_of_keys:
val = dic.get(kw)
if not val:
val = "NoneType Error"
elif isinstance(val,int):
val = "Integer Error"
else:
val=val['val']