Python特定的数据类型检查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python特定的数据类型检查相关的知识,希望对你有一定的参考价值。

什么是最好检查var是否有str,unicode或None;但不是别的什么?

我试过了

if not isinstance(ads['number'], (str, unicode, None)):
    ....

但得到以下异常:

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

`

答案

你有正确的想法,但None不是一个阶级。它的类型是NoneType,或者type(None)。后者在Python 2和3中都是开箱即用的。前者需要导入:from types import NoneType并且仅适用于Python 2。

另一答案

您可以使用

if not isinstance(a, (str, unicode, type(None))):
    ....

在python 2(你似乎正在使用)这也有效:

from types import NoneType
if not isinstance(a, (str, unicode, NoneType)):
    ....
另一答案

您可以使用type来查找方法并在列表中进行检查

例如:

if type(None) in [str, unicode, type(None)]:
    print "ok"
另一答案

作为对其他答案(这是正确的)的补充,我会对需要进行此类测试的案例的类型进行评论。

Distinguishing between a string and a scalar type

如果问题是区分字符串和数字,那么请求宽恕而不是许可也可以:

a = 1
try:
    b = a.upper()
except AttributeError:
    ...

由于这是Python的思维方式,它通常会使事情变得更简单,并且它还会处理a为None的情况。如果一个人试图阻止这样的错误,那么可能更容易让它反而发生然后抓住它。它也可能更可靠,因为它也可以处理一个人们没有想到的情况。

Distinguishing between a string and other iterables

然而,一个无法工作的情况是,当人们想要区分字符串和列表时(几个库使用函数参数进行区分)。问题是字符串和列表都是可迭代的,因此字符串可能会愉快地运行列表的代码而没有任何错误...除了现在您将字符串剪切成一个字符的片段。

>>> for el in a: print(el.upper())
...
H
E
L
L
O

(如果代码失败,错误可能会令人困惑。)为了避免这种影响:

a = "hello"
if isinstance(a, str):
    ...
else:
    ...

根据我的经验,这是唯一一个使用isinstance(x, (str,...))测试的建议。我很想知道是否有人认识别人?

以上是关于Python特定的数据类型检查的主要内容,如果未能解决你的问题,请参考以下文章

如何检查python中变量中存储的数据类型? [复制]

从 Apollo 缓存中读取特定类型的所有片段

分享前端开发常用代码片段

收藏|分享前端开发常用代码片段

关于js----------------分享前端开发常用代码片段

30 段 Python 实用代码