问题:我必须检查返回的值是否是 Python 字典。
Q1。这些选项中的哪一个是执行此操作的正确方法?
type(x) == dict
type(x) == type(dict)
isinstance(d, dict)
然后还有其他变体使用is
operator 而不是==
.
Q2。很多人说检查对象的类型通常是一种不好的做法,但是对于我最初的问题,我还有其他选择吗?
问题:我必须检查返回的值是否是 Python 字典。
Q1。这些选项中的哪一个是执行此操作的正确方法?
type(x) == dict
type(x) == type(dict)
isinstance(d, dict)
然后还有其他变体使用is
operator 而不是==
.
Q2。很多人说检查对象的类型通常是一种不好的做法,但是对于我最初的问题,我还有其他选择吗?
Q1。这些选项中的哪一个是执行此操作的正确方法?
不要在类型检查上浪费时间。
它很容易出错,因为它是基于假设的。
Q2。……我还有别的选择吗?
是的,这样做。
try:
x.the_dict_operation()
except TypeError:
# x was not the expected type for the operation
raise # or whatever.
在大多数情况下,这相当于“什么都不做”。
只写代码。如果“不知何故”恶意反社会者使用了错误的类型,它就会像预期的那样崩溃。
依赖于行为,而不是实际类型(参见其他答案)。
很多对象可以像字典一样,你不想强迫你的函数/API的用户使用普通的字典,对吧?
在务实方面:
>>> type({})
<type 'dict'>
>>> dict
<type 'dict'>
>>> type(dict)
<type 'type'>
>>> isinstance({}, dict)
True
>>> isinstance("", dict)
False
检查__getitem__
而不是验证类型。如果您真的想进行类型检查,那么 any 都可以(好吧,除了type(x) == type(dict)
,例如,这永远不会成立dict
)。isinstance
可能是最标准的方法。