os.walk onerror 参数的问题

Issue with os.walk onerror argument

我到处搜索,但找不到关于 os.walk(onerror) 如何工作的解释。

os.walk 默认忽略 listdir() 错误,但我至少需要收到警报,最好是导致此错误的目录路径。我应该如何设置这个参数?

感谢您的帮助。

错误处理程序应该是可调用的。它将使用一个参数调用,即异常实例。

def walk_error_handler(exception_instance):
    print("uh-oh!")  # you probably want to do something more substantial here..

for root, dirs, files in os.walk(dirname, onerror=walk_error_handler):
    ...

os.walk 默认情况下忽略错误是设计使然。这允许遍历继续遍历其他目录,例如,在遍历中遇到的一个子目录由于权限不足而无法列出。

在处理异常实例时,exception_instance.argstype(exception_instance)中可能包含您感兴趣的所有信息。由于它是 OSError(或子类型),因此 errno 将是一个有用的属性。

您可以与 stdlib errno module. For example, permission denied is errno.EACCES (13) 的常量进行比较。如果您尝试将 /root 列为普通用户,就会出现此错误。