Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';布尔';对象不能使用筛选器函数调用_Python_Python 3.x_Python 2.7 - Fatal编程技术网

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))