在Python中查找类型 - TypeError 'unicode'对象不可调用
我正在尝试确保一个对象在Python中是字符串类型(为了在谷歌应用引擎上使用)。我这样做是为了如果它超过500个字节,就可以把它转换成db.Text
类型。不过,我一直收到一个错误:TypeError 'unicode' object is not callable
if type(value) in types.StringTypes and len(value) > 499:
value = db.Text(value)
setattr(entity, key, value)
我应该用什么来检查这个对象的类型是否是字符串呢?
5 个回答
1
编辑: 哎呀!我看错了,应该是 types.StringTypes,而不是 types.StringType,所以测试可以是:
if type(value) in types.StringTypes and len(value) > 499:
value = db.Text(value)
这里面主要的问题是 OP 代码最后的 types.StringTypes 后面多了括号。
原文: 这里有几个问题:
- 如果 value 是一个 Unicode 字符串,用 type() 测试它会返回 types.UnicodeType
- types.StringType 是一个常量,不是一个函数,所以去掉括号。
- 而且,types.StringType 不能被迭代,所以要用 == 或 is 来测试它。
所以,你的测试可以像这样:
if ((type(value) == types.StringType) or (type(value) == types.UnicodeType)) and len(value) > 499:
value = db.Text(value)
6
我觉得你只需要把types.StringTypes
中的括号去掉,因为它是一个元组(而不是可以调用的东西,所以才会出错)。另外,你的代码可能实际上在使用StringType
,这意味着你的代码是在创建一个新的字符串实例,而不是返回str
类型。不管怎样,这看起来像是个打字错误。可以查看一下文档。
4
你为什么要调用 types.StringTypes
呢?它其实是一个元组:
>>> types.StringTypes
(<type 'str'>, <type 'unicode'>)
你可以用 isinstance(value, types.StringTypes) and len(value) > 499
这样的方式来检查。