Python 类型错误:';布尔';对象不能使用筛选器函数调用
我试图过滤出只有有效的电子邮件地址,但我得到下面的错误Python 类型错误:';布尔';对象不能使用筛选器函数调用,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我试图过滤出只有有效的电子邮件地址,但我得到下面的错误 Traceback (most recent call last): File "C:/Python27/ghhs.py", line 20, in <module> valid=list(filter(a,email)) TypeError: 'bool' object is not callable filter的第一个参数应该是第二个参数中的每个项都将被调用的函数,但是您首先调用函数并传递返回值。将筛选器调用更
Traceback (most recent call last):
File "C:/Python27/ghhs.py", line 20, in <module>
valid=list(filter(a,email)) TypeError: 'bool' object is not callable
filter
的第一个参数应该是第二个参数中的每个项都将被调用的函数,但是您首先调用函数并传递返回值。将筛选器调用更改为类似以下内容:
valid=list(filter(fun, email))
ETA
正如下面的评论所指出的,fun还有一些其他问题。从一开始,由于传递给filter
的函数会为每个项调用,因此它不应该尝试循环其输入,而只接受一个电子邮件地址,而不是地址列表
此外,您对地址中字符的初始测试也已中断。这样做会更好:
def fun(email):
if ('@' in email) and ('.' in email):
user, url = i.split('@')
web, domain = url.split(".")
if user.replace('-','').replace('_','').isalnum() is False:
return False
elif web.isalnum() is False:
return False
elif len(domain)>3:
return False
else:
return True
但更好的是,不要重新发明:
Python 3还是Python 2?你把它标记为两者。你甚至期望它做什么?您正在使用回调“函数”调用
filter
,该函数是调用fun
返回的实际值True
或False
。此外,在fun中删除for循环-它应该处理电子邮件列表的单个元素,而不是整个列表。在fun
中还有其他问题。i中的条件(“@”和“.”)与i中的条件“@”和“.”在i
@中的条件完全不同,当我在in过滤器处使用fun时,在打印有效i时,会得到一个空列表。请修复代码。
def fun(email):
if ('@' in email) and ('.' in email):
user, url = i.split('@')
web, domain = url.split(".")
if user.replace('-','').replace('_','').isalnum() is False:
return False
elif web.isalnum() is False:
return False
elif len(domain)>3:
return False
else:
return True
from validate_email import validate_email
valid = list(filter(validate_email, email))