2017-07-24 1 views
2

Auf Python 2.7 os.makedirs() fehlt exist_ok. Dies ist nur in Python 3 verfügbar.Wie umhergehen `exist_ok` fehlt auf Python 2.7?

Ich weiß, dass dies die eine Arbeits Arbeit um:

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

ich eine benutzerdefinierten my_make_dirs() Methode schaffen könnte und diese, statt os.makedirs(), aber das ist nicht schön.

Was ist die pythischste Arbeit, wenn Sie Python 2.7 unterstützen müssen?

AFAIK python-future oder six wird hier nicht helfen.

Antwort

3

Ein Weg, um es mit pathlib. Es hat eine backport for Python 2 und seine mkdir() Funktion unterstützt exist_ok.

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

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

Das sieht sauber und einfach aus. Vielen Dank. Du bekommst das Kopfgeld. – guettli

0

Was Sie tun, ist wahrscheinlich in Ordnung, aber wenn Sie erkennen und anpassen möchten, können Sie zur Laufzeit monkeypatch. Ich würde nicht sagen, das ist die beste Idee, es kann zu einigen seltsamen Eventualitäten führen, aber abhängig von Ihrer Situation ist es vielleicht in Ordnung. Legen Sie zumindest eine Dokumentation in und um diesen Code, damit der nächste Typ oder Mädchen weiß, was passiert.

Hier ist ein Beispiel dafür - Sie können dieses Skript mit "True" oder etwas anderes als Argument ausführen und den Unterschied sehen.

die Version von Python Erkennen von sys.version_info mit: https://docs.python.org/2/library/sys.html#sys.version_info https://docs.python.org/3/library/sys.html#sys.version_info

import sys 
import os 


def blah(a): 
    return "lskdflsdkfj" 


if sys.argv[1] == "true": 
    os.listdir = blah 

print(os.listdir('.'))