How to workaround `exist_ok` missing on Python 2.7?

guettli picture guettli · Jul 24, 2017 · Viewed 12.8k times · Source

On Python 2.7 os.makedirs() is missing exist_ok. This is available in Python 3 only.

I know that this is the a working work around:

try:
    os.makedirs(settings.STATIC_ROOT)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

I could create a custom my_make_dirs() method and use this, instead of os.makedirs(), but this is not nice.

What is the most pythonic work around, if you forced to support Python 2.7?

AFAIK python-future or six won't help here.

Answer

kichik picture kichik · Aug 7, 2017

One way around it is using pathlib. It has a backport for Python 2 and its mkdir() function supports exist_ok.

try:
  from pathlib import Path
except ImportError:
  from pathlib2 import Path  # python 2 backport

Path(settings.STATIC_ROOT).mkdir(exist_ok=True)