在Python 2.7 os.makedirs()
缺少exist_ok
。这仅适用于Python 3。
我知道这是一项有效的工作:
try:
os.makedirs(settings.STATIC_ROOT)
except OSError as e:
if e.errno != errno.EEXIST:
raise
我可以创建一个自定义的my_make_dirs()
方法并使用它,而不是os.makedirs()
,但这不是很好。
如果你被迫支持Python 2.7,最诡计多端的工作是什么?
AFAIK python-future或six在这里没有帮助。
一种方法是使用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)
在检查路径不存在后,您可以调用makedirs():
import os
if not os.path.exists(path):
os.makedirs(path)
你正在做的事情可能很好,但如果你想检测和适应,你可以在运行时monkeypatch。我不会说这是最好的主意,它可能导致一些奇怪的可能性,但根据你的情况,也许没关系。至少,在这段代码中包含一些文档,以便下一个人或者gal知道发生了什么。
这是一个例子 - 您可以使用“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('.'))
def makedirs(name, exist_ok=False):
if not os.path.exists(name) or not exist_ok:
os.makedirs(name)