使用引发异常的 lambda 过滤列表

xto*_*ofl 5 python exception filter

使用psutil我得到一个进程列表;我想过滤掉那些具有特定名称的人。

filter(lambda p: p.name()=="x", psutil.process_iter())
Run Code Online (Sandbox Code Playgroud)

但是,该psutil.Process.name()函数可能会抛出...在这种情况下filter会受到打击,并向我重新引发异常。

是否有一种filter_noexception函数/习惯用法,或者我需要p.name()自己将其包装到异常吞没函数中?

Fab*_*zzo 0

filter但正如文档所述,没有这样的处理:

请注意,如果 function 不是 None,则 filter(function, iterable) 相当于 [item for item in iterable if function(item)]

考虑到这一点,我会自己处理流程:

def filter_noexception(func, iter):
    result = []
    for i in iter:
        try:
            if func():
                result.append(i)
        except:
            pass
    return result

filtered_processes = filter_noexception(lambda p: p.name() == "x", psutil.process_iter())
Run Code Online (Sandbox Code Playgroud)