python - 从 Python 列表中过滤掉“None”,“str”对象不可调用
问题描述
我的脚本执行 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
构造替换也可以filter
正常工作:
result = []
for each in res:
if (isinstance(each, tuple) and each[0] is not None):
result.append(each)
但我想调试为什么filter
失败
解决方案
正如@101 的评论所建议的,filter
在我观察问题的相同方法中,关键字也被用作参数名称。
filter
参数是一个字符串,因此TypeError
只需将参数名称更改为ldap_filter
即可修复它
推荐阅读
- r - 如何摆脱多面图中的空条形图?
- mysql - 如何在 MySQL 列注释中连接字符串?
- python - Google Cloud Engine - 如何在 Python 3.7 中接收和处理电子邮件?
- java - 如何在 .jar 中包含和访问图像
- c# - 如何更改此动画过渡以自动发生?
- c# - 如何将 List 方法更改为 Array 方法?
- java - Spring Boot - 如何使用 cors 和 spring security 修复 Session bean
- ios - WebRTC iOS 13 问题与 Metal
- java - 如何在 Java 中截断部分字符串?
- amazon-web-services - 需要移动已部署的文件夹 - AWS CodeDeploy