python中的If语句,速记

2024-10-04 07:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

问题是:

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

Tags: pathreturnifosdefnotnomelse
2条回答

如果您使用的是python2而没有使用Python,那么这只是一个语法错误

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,但它确实会为您创建它。你知道吗

您也可以这样做,以避免打印“无”,但这相当尴尬:

s = ("Directorio existente") if existeCarpeta(nombre) else os.makedirs(nombre); print s if s else ''

相关问题 更多 >