Python';s psutil模块和一个奇怪的问题

Python';s psutil模块和一个奇怪的问题,python,windows,process,psutil,Python,Windows,Process,Psutil,这非常有效: def find_processes(): name = "ProcessName.exe" pid_list = psutil.get_pid_list() for pid in pid_list: try: if str(psutil.Process(pid).name()) == name: return True except: pass

这非常有效:

def find_processes():
    name = "ProcessName.exe"
    pid_list = psutil.get_pid_list()
    for pid in pid_list:
        try:
            if str(psutil.Process(pid).name()) == name:
                return True
        except:
            pass
    return False
这并不是:

def find_processes():
    name = "ProcessName.exe"
    pid_list = psutil.get_pid_list()
    for pid in pid_list:
        if str(psutil.Process(pid).name()) == name:
            return True
    return False
它引发一个错误:AccessDenied:(pid=560) 我在Windows环境中,需要访问所有进程的名称。我已经有了一个工作代码(前者),所以我的问题更多的是出于好奇


除了第一个示例中的语句外,
尝试
/
做什么?如果在第二个示例中删除它们,为什么不起作用?

除非您是root用户/管理员,否则每个进程中的所有信息都将不可用。请参见以下问题:

您最好更改您的第一个示例,以专门处理这些情况,包括:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid

有什么区别?(除了缩进)在第二种情况下,您似乎没有删除try-except语句。@ebarr-silly-me没有正确编辑。现在应该有区别了。因此,在第一个示例中,某些进程不可用,并且会抛出错误,但是因为我用except语句捕捉到它,循环继续,而没有try/except组合,循环在遇到第一个错误时退出?@DanielShaw Yup,正是这样。我添加了
except AccessDenied
而不仅仅是
except
的原因是我只希望循环忽略
AccessDenied
类型错误。应正常引发所有其他错误,从而导致代码退出。