os.walk onerror参数的问题

时间:2018-03-20 19:55:20

标签: python exception os.walk

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

os.walk错误地忽略了listdir()错误,但我需要至少收到警报,更好的情况是目录路径引起了这个错误。我应该如何设置这个论点?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

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

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默认忽略错误是设计的。这允许walk继续遍历其他目录,即使例如由于权限不足而无法列出walk中遇到的一个子目录。

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

您可以对stdlib errno模块的常量进行比较。例如,拒绝权限为errno.EACCES(13)。如果您尝试将/root列为普通用户,则会出现错误。