我的脚本执行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)
失败的原因
答案 0 :(得分:0)
正如@ 101的注释所建议的那样,在观察问题的相同方法中,filter
关键字也被用作参数名称。
filter
参数是一个字符串,因此TypeError
只需将参数名称更改为ldap_filter
即可解决