我遇到语法错误,但我不知道为什么...
问题出在这里
os.makedirs(nombre) if not existeCarpeta(nombre) else print ("Directorio existente")
我在打印中有一个指针,这是完整的功能:
def existeArchivo(nom):
return os.path.isfile(nom)
def existeCarpeta(nombre):
return os.path.isdir(nombre)
def creaCarpeta(nombre):
os.makedirs(nombre) if not existeCarpeta(nombre) else print ("Directorio existente")
答案 0 :(得分:0)
如果您使用的是Python 2而没有使用过,这只是语法错误
from __future__ import print_function
因为您不能在条件表达式中使用print
语句。
Python 2.7.10 (default, Oct 6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "foo" if False else print("error")
File "<stdin>", line 1
"foo" if False else print("error")
^
SyntaxError: invalid syntax
>>> from __future__ import print_function
>>> "foo" if False else print("error")
error
但是,您的代码容易出现竞争状况。如果在检查目录之后但尝试创建目录之前,有其他进程创建了该目录,则代码将引发错误。只需尝试创建目录,并捕获由此产生的任何异常。
# Python 2
import errno
try:
os.makedirs(nombre)
except OSError as exc:
if exc.errno != errno.EEXISTS:
raise
print ("Directorio existente")
# Python 3
try:
os.makedirs(nombre)
except FileExistsError:
print ("Directorio existente")
答案 1 :(得分:0)
这个怎么样?
print ("Directorio existente") if existeCarpeta(nombre) else os.makedirs(nombre)
如果该目录不存在,它将打印None
,但确实会为您创建它。
您也可以这样做以避免打印None,但是它很尴尬:
s = ("Directorio existente") if existeCarpeta(nombre) else os.makedirs(nombre); print s if s else ''