Python具体数据类型检查
Python specific data type check
最好检查 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
`
您可以使用 type 查找方法并在列表中检查
例如:
if type(None) in [str, unicode, type(None)]:
print "ok"
你的想法是对的,但是 None
不是 class。它的类型是 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)):
....
作为对其他答案(正确答案)的补充,我会在需要此类测试的案例类型中添加评论。
区分字符串和标量类型
如果问题是区分字符串和数字,那么请求原谅而不是许可同样有效:
a = 1
try:
b = a.upper()
except AttributeError:
...
因为那是 Python 的心态,它通常使事情变得更简单,并且 它也处理了 a 是 None 的情况。如果有人试图防止这样的错误,那么让它发生然后捕获它可能会更容易。它还可以更可靠,因为它还可以处理人们没有想到的情况。
区分字符串和其他可迭代对象
然而,它不起作用的一种情况是,当人们想要 区分字符串和 list(几个图书馆用函数参数来做到这一点)。问题是字符串和列表都是可迭代的,因此字符串可能会愉快地 运行 通过列表的代码而不会出现任何错误...除了现在您将字符串切成一个字符的片段。
>>> for el in a: print(el.upper())
...
H
E
L
L
O
(如果代码失败,错误可能会令人困惑。)为了避免这种影响:
a = "hello"
if isinstance(a, str):
...
else:
...
根据我的经验,这是唯一真正建议使用 isinstance(x, (str,...))
进行测试的情况。我很好奇有人认识别人吗?
最好检查 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
`
您可以使用 type 查找方法并在列表中检查
例如:
if type(None) in [str, unicode, type(None)]:
print "ok"
你的想法是对的,但是 None
不是 class。它的类型是 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)):
....
作为对其他答案(正确答案)的补充,我会在需要此类测试的案例类型中添加评论。
区分字符串和标量类型
如果问题是区分字符串和数字,那么请求原谅而不是许可同样有效:
a = 1
try:
b = a.upper()
except AttributeError:
...
因为那是 Python 的心态,它通常使事情变得更简单,并且 它也处理了 a 是 None 的情况。如果有人试图防止这样的错误,那么让它发生然后捕获它可能会更容易。它还可以更可靠,因为它还可以处理人们没有想到的情况。
区分字符串和其他可迭代对象
然而,它不起作用的一种情况是,当人们想要 区分字符串和 list(几个图书馆用函数参数来做到这一点)。问题是字符串和列表都是可迭代的,因此字符串可能会愉快地 运行 通过列表的代码而不会出现任何错误...除了现在您将字符串切成一个字符的片段。
>>> for el in a: print(el.upper())
...
H
E
L
L
O
(如果代码失败,错误可能会令人困惑。)为了避免这种影响:
a = "hello"
if isinstance(a, str):
...
else:
...
根据我的经验,这是唯一真正建议使用 isinstance(x, (str,...))
进行测试的情况。我很好奇有人认识别人吗?