python、shorthand中的if语句

If statement in python, shorthand

我有一个语法错误,但我不知道为什么...

问题是:

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")

如果您正在使用 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")

这个怎么样?

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 ''