Если заявление в Python, стенография - PullRequest
0 голосов
/ 13 ноября 2018

У меня синтаксическая ошибка, но я не знаю, почему ...

Вот проблема:

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

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Как насчет этого?

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 ''
0 голосов
/ 13 ноября 2018

Это только синтаксическая ошибка, если вы используете 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")
...