从Python列表中滤除“无”,则“ str”对象不可调用

时间:2018-08-23 06:20:41

标签: python exception typeerror

我的脚本执行LDAP搜索:

import ldap
...<initializations>
res = conn.search_s(base, scope_level, filter, attrs)
_logger.debug("LDAP query result: %s", res)

# Filter out the 'None' entries for referrals
filter(lambda x: (isinstance(x,tuple) and x[0] is not None), res)

此处的此过滤器错误显示为TypeError: 'str' object is not callable

我在其周围添加了try...except来记录_logger.debug("Result was:%s, Result type: %s", res, type(res)),它的确是一个列表

# Example:
Result was:[('CN=Domain Admins,CN=Users,DC=hiccups,DC=com',
{'sAMAccountName': ['domain admins']}),
(None, ['ldap://sirius.hiccups.com/DC=sirius,DC=hiccups,DC=com']),
(None, ['ldap://ForestDnsZones.hiccups.com/DC=ForestDnsZones,DC=hiccups,DC=com']),
(None, ['ldap://DomainDnsZones.hiccups.com/DC=DomainDnsZones,DC=hiccups,DC=com']),
(None, ['ldap://hiccups.com/CN=Configuration,DC=hiccups,DC=com'])],
Result type: <type 'list'>

如果我将列表复制到一个单独的脚本中并运行相同的过滤器,则它会按预期工作。

替换for的{​​{1}}构造也可以正常工作:

filter

但是我想调试result = [] for each in res: if (isinstance(each, tuple) and each[0] is not None): result.append(each) 失败的原因

1 个答案:

答案 0 :(得分:0)

正如@ 101的注释所建议的那样,在观察问题的相同方法中,filter关键字也被用作参数名称。

filter参数是一个字符串,因此TypeError

只需将参数名称更改为ldap_filter即可解决