If statement in python, shorthand
我有语法错误,但我不知道为什么…
问题是:
1 | os.makedirs(nombre) if not existeCarpeta(nombre) else print ("Directorio existente") |
我在打印中有一个指针,这是完整的函数:
1 2 3 4 5 6 7 8 | 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") |
这个怎么样?
1 | print ("Directorio existente") if existeCarpeta(nombre) else os.makedirs(nombre) |
如果目录不存在,它将打印
您也可以这样做以避免"无"被打印,但这非常尴尬:
1 | s = ("Directorio existente") if existeCarpeta(nombre) else os.makedirs(nombre); print s if s else '' |
如果您使用的是python 2,而没有使用它,那么这只是一个语法错误。
1 | from __future__ import print_function |
因为不能将
1 2 3 4 5 6 7 8 9 10 11 | 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 |
但是,您的代码容易受到竞争条件的影响。如果其他进程在检查目录之后但在尝试创建目录之前创建了该目录,则带有的代码将引发错误。只需尝试创建目录,并捕获因此发生的任何异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 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") |