[Python-Dev] Updates to PEP 471, the os.scandir() proposal (original) (raw)

Victor Stinner victor.stinner at gmail.com
Wed Jul 9 22:24:19 CEST 2014


2014-07-09 21:59 GMT+02:00 Ben Hoyt <benhoyt at gmail.com>:

Other python-devers, please chime in with your thoughts or votes.

Sorry, I didn't follow the whole discussion. IMO DirEntry must use methods and you should not expose nor document which infos are already provided by the OS or not. DirEntry should be a best-effort black-box object providing an API similar to pathlib.Path. is_dir() may be fast? fine, but don't say it in the documentation because Python must remain portable and you should not write code specific to one specific platform.

is_dir(), is_file(), is_symlink() and lstat() can fail as any other Python function, no need to specialize them with custom error handler. If you care, just use a very standard try/except.

I'm also against ensure_lstat=True or ideas like that fetching all datas transparently in the generator. The behaviour would be too different depending on the OS, and usually you don't need all informations. And it raises errors in the generator, which is something unusual, and difficult to handle (I don't like the onerror callback).

Example where you may sometimes need is_dir(), but not always

for entry in os.scandir(path): if ignore_entry(entry.name): # this entry is not interesting, lstat_result is useless here continue if entry.is_dir(): # fetch required data if needed continue ...

I don't understand why you are all focused on handling os.stat() and os.lstat() errors. See for example the os.walk() function which is an old function (python 2.6!): it doesn't catch erros on isdir(), even if it has an onerror parameter... It only handles errors on listdir(). IMO errors on os.stat() and os.lstat() are very rare under very specific conditions. The most common case is that you can get the status if you can list files.

Victor



More information about the Python-Dev mailing list