>> One issue with option #2 that I just realized -- does scandir yield the >> entry at all if there's a stat error? It >> can't really, because the caller will expect the .lstat attribute to be >> set (assuming he asked for type='lstat') but >> >> it won't be. Is effectively removing these entries just because the stat >> failed a problem? I kind of think it is. If >> so, is there a way to solve it with option #2? > > > Leave it up to the onerror handler. If it returns None, skip yielding the > entry, otherwise yield whatever it returned > -- which also means the error handler should be able to set fields on the > DirEntry: > > def log_err(exc, entry): > logger.warn("Cannot stat {}".format(exc.filename)) > entry.lstat.st_size = 0 > return True
This is an interesting idea, but it's just getting more and more complex, and I'm guessing that being able to change the attributes of DirEntry will make the C implementation more complex. Also, I'm not sure it's very workable. For log_err above, you'd actually have to do something like this, right? def log_err(exc, entry): logger.warn("Cannot stat {}".format(exc.filename)) entry.lstat = os.stat_result((0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) return entry Unless there's another simple way around this issue, I'm back to loving the simplicity of option #1, which avoids this whole question. -Ben _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com