我到处搜索,但我找不到关于os.walk(onerror)如何工作的解释。
os.walk错误地忽略了listdir()错误,但我需要至少收到警报,更好的情况是目录路径引起了这个错误。我应该如何设置这个论点?感谢您的帮助。
答案 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.args
和type(exception_instance)
中。由于它是OSError
(或子类型),errno
将是一个有用的属性。
您可以对stdlib errno
模块的常量进行比较。例如,拒绝权限为errno.EACCES
(13)。如果您尝试将/root
列为普通用户,则会出现错误。