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特定的数据类型检查的主要内容,如果未能解决你的问题,请参考以下文章