2017-07-24 66 views
2

Python 2.7 os.makedirs()缺失exist_ok。这仅在Python 3中可用。如何在Python 2.7上走动`exist_ok`缺少?

我知道,这是一个工作解决办法:

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

我可以创建自定义my_make_dirs()方法和使用,而不是os.makedirs(),但这不是很好。

如果你不得不支持Python 2.7,那么pythonic的工作是什么?

AFAIK python-futuresix在这里没有帮助。

回答

3

一种方法是使用pathlib。它有一个backport for Python 2和它的mkdir()功能支持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

这看起来干净和容易。谢谢。你得到赏金。 – guettli

0

你在做什么可能是好的,但如果你想检测和适应,你可以在运行时monkeypatch。我不会说这是最好的想法,它可能会导致一些奇怪的事情,但根据你的情况,也许没关系。至少,在这段代码中及周围放置一些文档,以便下一个家伙或加仑知道发生了什么。

下面是一个例子 - 你可以使用“true”或其他作为参数来运行这个脚本并查看其差异。

使用sys.version_info检测的Python版本: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('.'))